From b2395648c92f8375dc76ade90da48394a8908e66 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 3 Sep 2023 01:18:45 +0000 Subject: [PATCH] Rebuild pages at 1caecdafb53e4e5b5aee1bf2ec7dae4d0979b74a --- AnnabelTing_ip_master/authorship.json | 2 +- AnnabelTing_ip_master/commits.json | 2 +- DeltonCheng_ip_master/authorship.json | 2 +- DeltonCheng_ip_master/commits.json | 2 +- Eola-Z_ip_master/authorship.json | 2 +- Eola-Z_ip_master/commits.json | 2 +- JasonLCY-Temp_ip_master/authorship.json | 2 +- JasonLCY-Temp_ip_master/commits.json | 2 +- JasonRay168_ip_master/authorship.json | 2 +- JasonRay168_ip_master/commits.json | 2 +- Kokseng1_ip_master/authorship.json | 2 +- Kokseng1_ip_master/commits.json | 2 +- LINCHENYU2030S_ip_master/authorship.json | 2 +- LINCHENYU2030S_ip_master/commits.json | 2 +- PetrichorPrecipice_ip_master/authorship.json | 2 +- PetrichorPrecipice_ip_master/commits.json | 2 +- RSXIX_ip_master/authorship.json | 2 +- RSXIX_ip_master/commits.json | 2 +- RoeReRe_ip_master/authorship.json | 2 +- RoeReRe_ip_master/commits.json | 2 +- Sebtey_ip_master/authorship.json | 2 +- Sebtey_ip_master/commits.json | 2 +- SungMatt_ip_master/authorship.json | 2 +- SungMatt_ip_master/commits.json | 2 +- VN-Hao_ip_master/authorship.json | 2 +- VN-Hao_ip_master/commits.json | 2 +- WeeMingQing_ip_master/authorship.json | 2 +- WeeMingQing_ip_master/commits.json | 2 +- WinSheng1_ip_master/authorship.json | 2 +- WinSheng1_ip_master/commits.json | 2 +- XihuaZ_ip_master/authorship.json | 2 +- XihuaZ_ip_master/commits.json | 2 +- alyssaongyx_ip_master/authorship.json | 2 +- alyssaongyx_ip_master/commits.json | 2 +- antonTan96_ip_master/authorship.json | 2 +- antonTan96_ip_master/commits.json | 2 +- archive.zip | Bin 6571151 -> 6680072 bytes awhb_ip_master/commits.json | 2 +- billieboy7_ip_master/authorship.json | 2 +- billieboy7_ip_master/commits.json | 2 +- cheeggered_ip_master/authorship.json | 2 +- cheeggered_ip_master/commits.json | 2 +- dickongwd_ip_master/authorship.json | 2 +- dickongwd_ip_master/commits.json | 2 +- flexibo_ip_master/authorship.json | 2 +- flexibo_ip_master/commits.json | 2 +- frrrrry_ip_master/authorship.json | 2 +- frrrrry_ip_master/commits.json | 2 +- hcs1203_ip_master/authorship.json | 2 +- hcs1203_ip_master/commits.json | 2 +- jean-cq_ip_master/authorship.json | 2 +- jean-cq_ip_master/commits.json | 2 +- jiakai-17_ip_master/authorship.json | 2 +- jiakai-17_ip_master/commits.json | 2 +- jonyeokj_ip_master/authorship.json | 2 +- jonyeokj_ip_master/commits.json | 2 +- kohkaijie_ip_master/authorship.json | 2 +- kohkaijie_ip_master/commits.json | 2 +- lsyurea_ip_master/authorship.json | 2 +- lsyurea_ip_master/commits.json | 2 +- lynnlow175_ip_master/commits.json | 2 +- marquestye_ip_master/authorship.json | 2 +- marquestye_ip_master/commits.json | 2 +- matochichap_ip_master/authorship.json | 2 +- matochichap_ip_master/commits.json | 2 +- miljyy_ip_master/authorship.json | 2 +- miljyy_ip_master/commits.json | 2 +- nananakx-x_ip_master/authorship.json | 2 +- nananakx-x_ip_master/commits.json | 2 +- ncmathan_ip_master/authorship.json | 2 +- ncmathan_ip_master/commits.json | 2 +- raydenlim_ip_master/authorship.json | 2 +- raydenlim_ip_master/commits.json | 2 +- rayyan35p_ip_master/authorship.json | 2 +- rayyan35p_ip_master/commits.json | 2 +- reposense-logs/reposense.log.0 | 13954 ++++++++--------- ricketytoc_ip_master/authorship.json | 2 +- ricketytoc_ip_master/commits.json | 2 +- rocketninja7_ip_master/commits.json | 2 +- s0ngyang_ip_master/authorship.json | 2 +- s0ngyang_ip_master/commits.json | 2 +- saraozn_ip_master/authorship.json | 2 +- saraozn_ip_master/commits.json | 2 +- spatuly_ip_master/authorship.json | 2 +- spatuly_ip_master/commits.json | 2 +- summary.json | 2 +- suryanshkushwaha_ip_master/authorship.json | 2 +- suryanshkushwaha_ip_master/commits.json | 2 +- tayian_ip_master/authorship.json | 2 +- tayian_ip_master/commits.json | 2 +- techjay-c_ip_master/authorship.json | 2 +- techjay-c_ip_master/commits.json | 2 +- vansh284_ip_master/authorship.json | 2 +- vansh284_ip_master/commits.json | 2 +- wjacobw_ip_master/authorship.json | 2 +- wjacobw_ip_master/commits.json | 2 +- wr1159_ip_master/commits.json | 2 +- yihfei_ip_master/authorship.json | 2 +- yihfei_ip_master/commits.json | 2 +- 99 files changed, 7074 insertions(+), 7074 deletions(-) diff --git a/AnnabelTing_ip_master/authorship.json b/AnnabelTing_ip_master/authorship.json index b02b6dcc..f9789641 100644 --- a/AnnabelTing_ip_master/authorship.json +++ b/AnnabelTing_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" ui.exitResponse();","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":8}},{"path":"src/main/java/ChatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class ChatException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" public ChatException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":5}},{"path":"src/main/java/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":4}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" public String fileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" return \"D | \" + super.fileDescription() + \" | \" + this.by;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" return \"[D]\" + super.taskDescription() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":21}},{"path":"src/main/java/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" public DeadlineCommand(String description, LocalDate by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" Task deadline \u003d new Deadline(this.description, this.by);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" ui.formatTaskResponse(deadline, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":23}},{"path":"src/main/java/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage){","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" tasks.deleteTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" ui.deleteTaskResponse(tasks.getTask(taskNumber), tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":18}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" private static Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" private static TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" private static Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" tasks \u003d storage.loadFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" public void run() throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" ui.greetResponse();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":" public static void main(String[] args) throws ChatException {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AnnabelTing":35,"-":3}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" private String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" private String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" public String fileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" return \"E | \" + super.fileDescription() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" return \"[E]\" + super.taskDescription() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":19}},{"path":"src/main/java/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" private String from;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" private String to;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" public EventCommand(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" Task event \u003d new Event(this.description, this.from, this.to);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" ui.formatTaskResponse(event, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":23}},{"path":"src/main/java/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" ui.prompt();","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":8}},{"path":"src/main/java/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" ui.listTaskResponse(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":8}},{"path":"src/main/java/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class MarkCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" tasks.markDone(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" ui.markDoneResponse(tasks.getTask(taskNumber));","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":18}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" public Parser(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" public static Command parse(String userInput) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" String[] userCommand \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" switch (userCommand[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" String todoDescription \u003d userCommand[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" return new TodoCommand(todoDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" String[] deadlineTask \u003d userCommand[1].split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" String deadlineDescription \u003d deadlineTask[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" LocalDate deadlineBy \u003d LocalDate.parse(deadlineTask[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" return new DeadlineCommand(deadlineDescription, deadlineBy);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the deadline.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the deadline in the format of (yyyy-mm-dd).\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" String[] eventTask \u003d userCommand[1].split(\" /from \");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" String eventDescription \u003d eventTask[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" String[] eventDuration \u003d eventTask[1].split(\" /to \");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":" String eventFrom \u003d eventDuration[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":" String eventTo \u003d eventDuration[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" return new EventCommand(eventDescription, eventFrom, eventTo);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AnnabelTing"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the duration.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AnnabelTing"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AnnabelTing"},"content":" int taskNumberMark \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AnnabelTing"},"content":" return new MarkCommand(taskNumberMark);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AnnabelTing"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AnnabelTing"},"content":" int taskNumberUnmark \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AnnabelTing"},"content":" return new UnmarkCommand(taskNumberUnmark);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AnnabelTing"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AnnabelTing"},"content":" int taskNumberDelete \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AnnabelTing"},"content":" return new DeleteCommand(taskNumberDelete);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AnnabelTing"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AnnabelTing"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AnnabelTing"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AnnabelTing"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AnnabelTing"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AnnabelTing"},"content":" switch (userCommand[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AnnabelTing"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AnnabelTing"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"AnnabelTing"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"AnnabelTing"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"AnnabelTing"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"AnnabelTing"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"AnnabelTing"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please be more detailed in your instructions.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":73}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" private final String pathName;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" private TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" public Storage(String pathName) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" this.pathName \u003d pathName;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" public TaskList loadFile() throws ChatException{","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" File f \u003d new File(this.pathName);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" String pastTaskLine \u003d sc.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" String[] pastTaskDetails \u003d pastTaskLine.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" Task pastTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" switch (pastTaskDetails[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" pastTask \u003d new Task(pastTaskDetails[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(pastTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" if (pastTaskDetails[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" pastTask.setTaskState(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" pastTask \u003d new Deadline(pastTaskDetails[2], LocalDate.parse(pastTaskDetails[3]));","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(pastTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AnnabelTing"},"content":" if (pastTaskDetails[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"AnnabelTing"},"content":" pastTask.setTaskState(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AnnabelTing"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AnnabelTing"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AnnabelTing"},"content":" pastTask \u003d new Event(pastTaskDetails[2], pastTaskDetails[3], pastTaskDetails[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(pastTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AnnabelTing"},"content":" if (pastTaskDetails[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"AnnabelTing"},"content":" pastTask.setTaskState(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"AnnabelTing"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"AnnabelTing"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! The file is corrupted\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"AnnabelTing"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AnnabelTing"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! There are errors locating the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"AnnabelTing"},"content":" public void saveList(TaskList taskList) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"AnnabelTing"},"content":" FileWriter fw \u003d new FileWriter(this.pathName);","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"AnnabelTing"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"AnnabelTing"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"AnnabelTing"},"content":" bw.write(taskList.getTask(i + 1).fileString());","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"AnnabelTing"},"content":" bw.newLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"AnnabelTing"},"content":" bw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"AnnabelTing"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"AnnabelTing"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Tasks could not be saved.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AnnabelTing":74}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" public String taskDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" return (isDone ? \"[X] \" + this.description : \"[ ] \" + this.description); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" public String fileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" return (isDone ? \"1\" + \" | \" + this.description : \"0\" + \" | \" + this.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" public String fileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" return \"T | \" + fileDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" return \"[T]\" + taskDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" public void setTaskState(boolean isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":31}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" private static ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" return taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" return taskList.get(taskNumber - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" public void deleteTask(int taskNumber) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" Task task \u003d this.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" taskList.remove(taskNumber - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the correct task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" public void markDone(int taskNumber) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" Task task \u003d taskList.get(taskNumber - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" task.setTaskState(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the correct task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" public void markUndone(int taskNumber) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AnnabelTing"},"content":" Task task \u003d taskList.get(taskNumber - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AnnabelTing"},"content":" task.setTaskState(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AnnabelTing"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the correct task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":44}},{"path":"src/main/java/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" Task todo \u003d new Task(this.description);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" ui.formatTaskResponse(todo, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":19}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" public void greetResponse() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Hello! I\u0027m Duke\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" public void formatTaskResponse(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \" + task","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" + \"\\nNow you have \" + tasks.getSize() + \" tasks in the list.\"); ;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" public void listTaskResponse(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" for (int i \u003d 1; i \u003c tasks.getSize() + 1; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(i + \". \" + tasks.getTask(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" public void deleteTaskResponse(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\" + task","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" + \"\\nNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" public void markDoneResponse(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" public void markUndoneResponse(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":" public void exitResponse() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AnnabelTing"},"content":" public void showLoadingError(ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AnnabelTing"},"content":" public void prompt() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-( \\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AnnabelTing"},"content":" \"I can understand the following commands: \\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AnnabelTing"},"content":" \"1. todo description \\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AnnabelTing"},"content":" \"2. deadline description /by date (yyyy-mm-dd)\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AnnabelTing"},"content":" \"3. event description /from time /to time\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AnnabelTing"},"content":" \"4. list\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AnnabelTing"},"content":" \"5. mark task number\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AnnabelTing"},"content":" \"6. unmark task number\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AnnabelTing"},"content":" \"7. delete task number\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AnnabelTing"},"content":" \"8. bye\");","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":52}},{"path":"src/main/java/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":" int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" tasks.markUndone(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" ui.markUndoneResponse(tasks.getTask(taskNumber));","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":"byw","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":11}}] +[{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"T | 0 | eat","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"D | 0 | bath | 2029-05-30","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" private static Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" private static TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" private static Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" tasks \u003d storage.loadFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" public void run() throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" ui.greetResponse();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":" Command c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" c.execute(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AnnabelTing"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"AnnabelTing"},"content":" public static void main(String[] args) throws ChatException {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"AnnabelTing"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"AnnabelTing":44,"-":3}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" ui.exitResponse();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":14}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" public abstract void execute(TaskList tasks, Ui ui, Storage storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":10}},{"path":"src/main/java/duke/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" private LocalDate by;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" public DeadlineCommand(String description, LocalDate by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" Task deadline \u003d new Deadline(this.description, this.by);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" ui.formatTaskResponse(deadline, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":32}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"public class DeleteCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" private int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" public DeleteCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage){","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" ui.deleteTaskResponse(tasks.getTask(taskNumber), tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" tasks.deleteTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":25}},{"path":"src/main/java/duke/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" private String from;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" private String to;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" public EventCommand(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" Task event \u003d new Event(this.description, this.from, this.to);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" ui.formatTaskResponse(event, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":32}},{"path":"src/main/java/duke/command/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" ui.prompt();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":14}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" ui.listTaskResponse(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":14}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"public class MarkCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" public MarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" tasks.markDone(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" ui.markDoneResponse(tasks.getTask(taskNumber));","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":25}},{"path":"src/main/java/duke/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" public TodoCommand(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" Task todo \u003d new Task(this.description);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" ui.formatTaskResponse(todo, tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":27}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import duke.ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" int taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" public UnmarkCommand(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" this.taskNumber \u003d taskNumber;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" public void execute(TaskList tasks, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" tasks.markUndone(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" ui.markUndoneResponse(tasks.getTask(taskNumber));","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" storage.saveList(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" } catch (ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" ui.showLoadingError(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":25}},{"path":"src/main/java/duke/exception/ChatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"public class ChatException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" public ChatException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":7}},{"path":"src/main/java/duke/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" private String userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" public Parser(String userInput) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" public static Command parse(String userInput) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" String[] userCommand \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" switch (userCommand[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" String todoDescription \u003d userCommand[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" return new TodoCommand(todoDescription);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" String[] deadlineTask \u003d userCommand[1].split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" String deadlineDescription \u003d deadlineTask[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" LocalDate deadlineBy \u003d LocalDate.parse(deadlineTask[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" return new DeadlineCommand(deadlineDescription, deadlineBy);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the deadline.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the deadline in the format of (yyyy-mm-dd).\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" String[] eventTask \u003d userCommand[1].split(\" /from \");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AnnabelTing"},"content":" String eventDescription \u003d eventTask[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AnnabelTing"},"content":" String[] eventDuration \u003d eventTask[1].split(\" /to \");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AnnabelTing"},"content":" String eventFrom \u003d eventDuration[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AnnabelTing"},"content":" String eventTo \u003d eventDuration[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AnnabelTing"},"content":" return new EventCommand(eventDescription, eventFrom, eventTo);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AnnabelTing"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the duration.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AnnabelTing"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AnnabelTing"},"content":" int taskNumberMark \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AnnabelTing"},"content":" return new MarkCommand(taskNumberMark);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AnnabelTing"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AnnabelTing"},"content":" int taskNumberUnmark \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AnnabelTing"},"content":" return new UnmarkCommand(taskNumberUnmark);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AnnabelTing"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AnnabelTing"},"content":" int taskNumberDelete \u003d Integer.parseInt(userCommand[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AnnabelTing"},"content":" return new DeleteCommand(taskNumberDelete);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AnnabelTing"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AnnabelTing"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AnnabelTing"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AnnabelTing"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"AnnabelTing"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"AnnabelTing"},"content":" switch (userCommand[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"AnnabelTing"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"AnnabelTing"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"AnnabelTing"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"AnnabelTing"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"AnnabelTing"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"AnnabelTing"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"AnnabelTing"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please be more detailed in your instructions.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":78}},{"path":"src/main/java/duke/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" private final String pathName;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" private TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" public Storage(String pathName) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" this.pathName \u003d pathName;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" public TaskList loadFile() throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" File f \u003d new File(this.pathName);","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" f.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" f.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" Scanner sc \u003d new Scanner(f);","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" String pastTaskLine \u003d sc.nextLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" String[] pastTaskDetails \u003d pastTaskLine.split(\" \\\\| \");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":" Task pastTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":" switch (pastTaskDetails[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"AnnabelTing"},"content":" pastTask \u003d new Task(pastTaskDetails[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(pastTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AnnabelTing"},"content":" if (pastTaskDetails[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"AnnabelTing"},"content":" pastTask.setTaskState(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"AnnabelTing"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"AnnabelTing"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"AnnabelTing"},"content":" pastTask \u003d new Deadline(pastTaskDetails[2], LocalDate.parse(pastTaskDetails[3]));","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(pastTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AnnabelTing"},"content":" if (pastTaskDetails[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"AnnabelTing"},"content":" pastTask.setTaskState(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"AnnabelTing"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"AnnabelTing"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"AnnabelTing"},"content":" pastTask \u003d new Event(pastTaskDetails[2], pastTaskDetails[3], pastTaskDetails[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"AnnabelTing"},"content":" tasks.addTask(pastTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AnnabelTing"},"content":" if (pastTaskDetails[1].equals(\"1\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"AnnabelTing"},"content":" pastTask.setTaskState(true);","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"AnnabelTing"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"AnnabelTing"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! The file is corrupted\");","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"AnnabelTing"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"AnnabelTing"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! There are errors locating the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"AnnabelTing"},"content":" public void saveList(TaskList taskList) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"AnnabelTing"},"content":" FileWriter fw \u003d new FileWriter(this.pathName);","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"AnnabelTing"},"content":" BufferedWriter bw \u003d new BufferedWriter(fw);","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"AnnabelTing"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"AnnabelTing"},"content":" bw.write(taskList.getTask(i + 1).fileString());","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"AnnabelTing"},"content":" bw.newLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"AnnabelTing"},"content":" bw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"AnnabelTing"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"AnnabelTing"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Tasks could not be saved.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"AnnabelTing":82}},{"path":"src/main/java/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" private LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" public Deadline(String description, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" public String fileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" return \"D | \" + super.fileDescription() + \" | \" + this.by;","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" return \"[D]\" + super.taskDescription() + \" (by: \" + by.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":23}},{"path":"src/main/java/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" private String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" private String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" public String fileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" return \"E | \" + super.fileDescription() + \" | \" + this.from + \" | \" + this.to;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" return \"[E]\" + super.taskDescription() + \" (from: \" + this.from + \" to: \" + this.to + \")\";","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":21}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" public String taskDescription() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" return (isDone ? \"[X] \" + this.description : \"[ ] \" + this.description); // mark done task with X","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" public String fileDescription() {","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" return (isDone ? \"1\" + \" | \" + this.description : \"0\" + \" | \" + this.description);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" public String fileString() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" return \"T | \" + fileDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" return \"[T]\" + taskDescription();","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" public void setTaskState(boolean isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":33}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":" private static ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" return taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" public Task getTask(int taskNumber) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" return taskList.get(taskNumber - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" taskList.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" public void deleteTask(int taskNumber) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" Task task \u003d this.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" taskList.remove(taskNumber - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the correct task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" public void markDone(int taskNumber) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" Task task \u003d taskList.get(taskNumber - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":" task.setTaskState(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the correct task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AnnabelTing"},"content":" public void markUndone(int taskNumber) throws ChatException {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AnnabelTing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AnnabelTing"},"content":" Task task \u003d taskList.get(taskNumber - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AnnabelTing"},"content":" task.setTaskState(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AnnabelTing"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AnnabelTing"},"content":" throw new ChatException(\"☹ OOPS!!! Please specify the correct task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":48}},{"path":"src/main/java/duke/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"package duke.ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"import duke.exception.ChatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"AnnabelTing"},"content":" this.sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"AnnabelTing"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"AnnabelTing"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"AnnabelTing"},"content":" public void greetResponse() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Hello! I\u0027m Duke\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"AnnabelTing"},"content":" public void formatTaskResponse(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n \" + task","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"AnnabelTing"},"content":" + \"\\nNow you have \" + tasks.getSize() + \" tasks in the list.\"); ;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"AnnabelTing"},"content":" public void listTaskResponse(TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"AnnabelTing"},"content":" for (int i \u003d 1; i \u003c tasks.getSize() + 1; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(i + \". \" + tasks.getTask(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"AnnabelTing"},"content":" public void deleteTaskResponse(Task task, TaskList tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\" + task","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"AnnabelTing"},"content":" + \"\\nNow you have \" + tasks.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"AnnabelTing"},"content":" public void markDoneResponse(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"AnnabelTing"},"content":" public void markUndoneResponse(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\\n\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"AnnabelTing"},"content":" public void exitResponse() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"AnnabelTing"},"content":" public void showLoadingError(ChatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"AnnabelTing"},"content":" public void prompt() {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"AnnabelTing"},"content":" System.out.println(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-( \\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"AnnabelTing"},"content":" \"I can understand the following commands: \\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"AnnabelTing"},"content":" \"1. todo description \\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"AnnabelTing"},"content":" \"2. deadline description /by date (yyyy-mm-dd)\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"AnnabelTing"},"content":" \"3. event description /from time /to time\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"AnnabelTing"},"content":" \"4. list\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"AnnabelTing"},"content":" \"5. mark task number\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"AnnabelTing"},"content":" \"6. unmark task number\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"AnnabelTing"},"content":" \"7. delete task number\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"AnnabelTing"},"content":" \"8. bye\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"AnnabelTing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"AnnabelTing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"AnnabelTing":58}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"AnnabelTing"},"content":"todo borrow book","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"AnnabelTing"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"AnnabelTing"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"AnnabelTing"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"AnnabelTing"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"AnnabelTing"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"AnnabelTing"},"content":"mark 3","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"AnnabelTing"},"content":"unmark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"AnnabelTing"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"AnnabelTing"},"content":"byw","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"AnnabelTing"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"AnnabelTing":11}}] diff --git a/AnnabelTing_ip_master/commits.json b/AnnabelTing_ip_master/commits.json index 7d0ceb48..499e0ba2 100644 --- a/AnnabelTing_ip_master/commits.json +++ b/AnnabelTing_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AnnabelTing":[{"date":"2023-08-24","commitResults":[{"hash":"a176d9025745d62eca1038484e4ec829fd275eaa","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"2347f4c796e4764e55999eb74abd67e4ded6b625","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"e0b0cbca29debe06cad118530d4188cce0e9c330","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"c38b1f81c1f1405791a2e75666d75aae8cad730c","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":4}}},{"hash":"00b7df57abef5d8ff651cb0621ed69d260b79569","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":17}}},{"hash":"89c8e637eff91724c8d6e5ee293e743db6b6a2aa","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"e56c2bd2c3cb6346d41e91e70b037bbd78348553","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":34}}},{"hash":"75af794e92756b293303dd9afb5f591d2f13947f","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3816fd41a249194c96c563c35bb92d1c093102c4","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":100,"deletions":9}}},{"hash":"b6eea09407df421750e629e7e0fb3055b0e0f32f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"82e36112876890eac810e5ad1cf16ec5d3ce4ac5","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":11,"deletions":6}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9b44ae554247d1864e0652d3354fca7d7b210a60","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":351,"deletions":146}}}]}]},"authorFileTypeContributionMap":{"AnnabelTing":{"java":501,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":11}},"authorContributionVariance":{"AnnabelTing":19927.775},"authorDisplayNameMap":{"AnnabelTing":"CS2103T-F10-1 TING..ABEL"}} +{"authorDailyContributionsMap":{"AnnabelTing":[{"date":"2023-08-24","commitResults":[{"hash":"a176d9025745d62eca1038484e4ec829fd275eaa","isMergeCommit":false,"messageTitle":"Level-0","messageBody":"","tags":["Level-1","Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":6}}},{"hash":"2347f4c796e4764e55999eb74abd67e4ded6b625","isMergeCommit":false,"messageTitle":"Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"e0b0cbca29debe06cad118530d4188cce0e9c330","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":4}}},{"hash":"c38b1f81c1f1405791a2e75666d75aae8cad730c","isMergeCommit":false,"messageTitle":"Level-3","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":4}}},{"hash":"00b7df57abef5d8ff651cb0621ed69d260b79569","isMergeCommit":false,"messageTitle":"Level-4","messageBody":"","tags":["Level-4","A-Inheritance"],"fileTypesAndContributionMap":{"java":{"insertions":86,"deletions":17}}},{"hash":"89c8e637eff91724c8d6e5ee293e743db6b6a2aa","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":11,"deletions":0}}},{"hash":"e56c2bd2c3cb6346d41e91e70b037bbd78348553","isMergeCommit":false,"messageTitle":"Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":71,"deletions":34}}},{"hash":"75af794e92756b293303dd9afb5f591d2f13947f","isMergeCommit":false,"messageTitle":"Level-6","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}}]},{"date":"2023-08-31","commitResults":[{"hash":"3816fd41a249194c96c563c35bb92d1c093102c4","isMergeCommit":false,"messageTitle":"Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":100,"deletions":9}}},{"hash":"b6eea09407df421750e629e7e0fb3055b0e0f32f","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"82e36112876890eac810e5ad1cf16ec5d3ce4ac5","isMergeCommit":false,"messageTitle":"Level-8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":2},"java":{"insertions":11,"deletions":6}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9b44ae554247d1864e0652d3354fca7d7b210a60","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":351,"deletions":146}}},{"hash":"818aa36b273f41fe924e4b727958064f70b4c343","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":113,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"AnnabelTing":{"java":612,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":13}},"authorContributionVariance":{"AnnabelTing":27118.25},"authorDisplayNameMap":{"AnnabelTing":"CS2103T-F10-1 TING..ABEL"}} diff --git a/DeltonCheng_ip_master/authorship.json b/DeltonCheng_ip_master/authorship.json index 26a406c0..42261586 100644 --- a/DeltonCheng_ip_master/authorship.json +++ b/DeltonCheng_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"# 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":"DeltonCheng"},"content":"3. After that, locate the `src/main/java/main.Duke.java` file, right-click it, and choose `Run 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":{"DeltonCheng":2,"-":22}},{"path":"src/main/java/actions/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package actions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" private ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" String line \u003d \"~~*~~*~~*~~*~~*~~*~~*~~*~~*~~\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArrayList){","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" public void chadAddList(Task input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.add(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" public String chadRemoveList(int index){","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" Task removed \u003d taskArrayList.remove(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" return removed.name;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Invalid task index! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" public void chadListTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" if (taskArrayList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your task list is EMPTY!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your outstanding tasks are...\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"tasks.Task \" + (i + 1) + \") \" + taskArrayList.get(i)); //\u003c\u003c\u003c\u003c\u003c","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"\\n\" + \"Get to work NOW!\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" public void chadMarkTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.get(index - 1).isComplete \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" public void chadUnmarkTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.get(index - 1).isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":53}},{"path":"src/main/java/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import actions.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" private TaskList tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" public ArrayList\u003cTask\u003e taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" private Parser parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" private Duke() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" this.tasklist \u003d new TaskList(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" this.parser \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public static class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" ui.chadGreet();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" storage.makeNewDirectory();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" storage.makeNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" storage.loadFile(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" parser \u003d new Parser(this, taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" Scanner scanObj \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" boolean check \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" while (check) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" String input \u003d scanObj.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" String[] inputArray \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" check \u003d parser.inputParse(inputArray);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" scanObj.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" public static void main (String[]args){","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" Duke chad \u003d new Duke();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" chad.run();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"DeltonCheng":59,"-":1}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import main.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import actions.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" private Duke chad;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" private TaskList tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" public Parser(Duke chad, ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" this.chad \u003d chad;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" this.tasklist \u003d new TaskList(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" public boolean inputParse(String[] inputArray) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray[0].equals(\"bye\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" ui.chadBye();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"list\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadListTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadMarkTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" ui.chadMarkTaskOutput(chad.taskArrayList.get(index - 1).name,","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" chad.taskArrayList.get(index - 1).getMark());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadUnmarkTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" ui.chadUnmarkTaskOutput(chad.taskArrayList.get(index - 1).name,","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" chad.taskArrayList.get(index - 1).getMark());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003d\u003d 1 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":" Todo newTodo \u003d new Todo(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newTodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newTodo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003c 2 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" String[] details \u003d inputArray[1].split(\" /by \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" if (details.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Umm you forgot the deadline! Remember to use /by before the deadline!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":" Deadline newDeadline \u003d new Deadline(details[0], details[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newDeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newDeadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Make sure the date format is: d MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"event\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003c 2 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"DeltonCheng"},"content":" String[] details \u003d inputArray[1].split(\" /from \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"DeltonCheng"},"content":" if (details.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey you are missing the start date! Remember to use /from before the deadline!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"DeltonCheng"},"content":" String[] timings \u003d details[1].split(\" /to \", 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"DeltonCheng"},"content":" if (timings.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"The end date is missing! Do better! Use /to!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(timings[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(timings[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"DeltonCheng"},"content":" Event newEvent \u003d new Event(details[0], timings[0], timings[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newEvent);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newEvent.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"DeltonCheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Make sure the date format is: d MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"DeltonCheng"},"content":" String name \u003d tasklist.chadRemoveList(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"DeltonCheng"},"content":" ui.chadRemoveOutput(name, chad.taskArrayList.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"DeltonCheng"},"content":" ui.chadOutput(\"Hmm? You are not making sense!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"DeltonCheng"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":140}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" private static final String FILE_PATH_NAME \u003d \"./data/chadBot.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public void makeNewDirectory() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" File newDir \u003d new File(\"./data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" if (newDir.mkdirs()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Data directory has been created successfully!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Data directory was not created! (There may already exists a data directory)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" public void makeNewFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" File newFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" if (newFile.createNewFile()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"I have created this file for you: \" + newFile.getName());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"You already have the file... Stop wasting my time\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"An error has occurred when creating the file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" public void printFile() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" File chadFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" Scanner s \u003d new Scanner(chadFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" public void writeFile(ArrayList\u003cTask\u003e t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" for (Task task : t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" fw.write(task.taskToStringStore(task) + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"There was an error writing the file: \" + e);;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":" public Task stringToTask(String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":" String[] parts \u003d data.split(\"-\", 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":" String marked \u003d parts[1].toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" boolean mark \u003d marked.equals(\"X\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" Todo t \u003d new Todo(parts[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" t.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":" return t;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":" case \"D\":","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(parts[2], parts[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(d.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" return d;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" case \"E\":","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(parts[2], parts[3], parts[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" return e;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" public void loadFile(ArrayList\u003cTask\u003e task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":" File chadFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" Scanner s \u003d new Scanner(chadFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Here are the tasks from last time:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":" String nextTask \u003d s.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" Task t \u003d stringToTask(nextTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":" if (t !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":" task.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"DeltonCheng"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"File not found... Unable to load tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":108}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate date;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" this.date \u003d LocalDate.parse(by, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" String dateString \u003d this.date.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dateString + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" String dateString \u003d this.date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" return \"D-\" + super.taskToStringStore(task) + dateString;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":27}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate dateFrom;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate dateTo;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public Event(String name, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" this.dateFrom \u003d LocalDate.parse(from, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" this.dateTo \u003d LocalDate.parse(to, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" String dateFromString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"dd.MMM.yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" String dateToString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"dd.MMM.yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" return \"[E]\" + super.toString() + \" (from: \" + dateFromString + \" to: \" + dateToString + \" )\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" String dateFromString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" String dateToString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" return \"E-\" + super.taskToStringStore(task) + dateFromString + \"-\" + dateToString ;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":31}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"public class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":" public String name;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":" public boolean isComplete;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" public Task(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public String getMark() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" return (isComplete ? \"X\" : \" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" return \"[\" + getMark() + \"] \" + name;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" String isCompleteString \u003d (getMark() \u003d\u003d \"X\") ? \"X\" : \"O\";","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" return isCompleteString + \"-\" + task.name + \"-\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":25}},{"path":"src/main/java/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":" public Todo(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" return \"T-\" + super.taskToStringStore(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":18}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":" String line \u003d \"~~*~~*~~*~~*~~*~~*~~*~~*~~*~~\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":" public void chadGreet() {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Yo! This is CHADbot\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Need sum help?\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public void chadBye() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Cya l8r~\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" public void chadOutput(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public void chadAddListOutput(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \" has been added to yo list!\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public void chadExceptionOutput(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" public void chadRemoveOutput(String input, int size){","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Okay! I have removed this task :\\n\" + input);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" if (size \u003d\u003d 0){","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your list is currently empty! Good job :)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your list is currently \" + size + \" long... Get back to work!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" public void chadMarkTaskOutput(String task, String mark){","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Good job! tasks.Task fulfilled!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(task + \" [\" + mark + \"]\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" public void chadUnmarkTaskOutput(String task, String mark){","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Boooo! tasks.Task is not done!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(task + \" [\" + mark + \"]\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":60}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DeltonCheng":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"DeltonCheng"},"content":"java -classpath ..\\bin 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":{"DeltonCheng":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"# 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":"DeltonCheng"},"content":"3. After that, locate the `src/main/java/main.Duke.java` file, right-click it, and choose `Run 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":{"DeltonCheng":2,"-":22}},{"path":"src/main/java/actions/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package actions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" private ArrayList\u003cTask\u003e taskArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" String line \u003d \"~~*~~*~~*~~*~~*~~*~~*~~*~~*~~\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" public TaskList(ArrayList\u003cTask\u003e taskArrayList){","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" this.taskArrayList \u003d taskArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" public void chadAddList(Task input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.add(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" public String chadRemoveList(int index){","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" Task removed \u003d taskArrayList.remove(index - 1);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" return removed.name;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Invalid task index! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" public void chadListTask() {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" if (taskArrayList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your task list is EMPTY!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your outstanding tasks are...\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" for (int i \u003d 0; i \u003c taskArrayList.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"tasks.Task \" + (i + 1) + \") \" + taskArrayList.get(i)); //\u003c\u003c\u003c\u003c\u003c","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"\\n\" + \"Get to work NOW!\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" public void chadMarkTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.get(index - 1).isComplete \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" public void chadUnmarkTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" taskArrayList.get(index - 1).isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":53}},{"path":"src/main/java/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import parser.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import actions.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" private TaskList tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" public ArrayList\u003cTask\u003e taskArrayList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" private Parser parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" private Duke() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" this.tasklist \u003d new TaskList(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" this.parser \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public static class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" public void run() {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" ui.chadGreet();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" storage.makeNewDirectory();","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" storage.makeNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" storage.loadFile(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" parser \u003d new Parser(this, taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" Scanner scanObj \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" boolean check \u003d true;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" while (check) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" String input \u003d scanObj.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" String[] inputArray \u003d input.split(\" \", 2);","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" check \u003d parser.inputParse(inputArray);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" scanObj.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" public static void main (String[]args){","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" Duke chad \u003d new Duke();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" chad.run();","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"DeltonCheng":59,"-":1}},{"path":"src/main/java/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import ui.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import main.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import actions.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" private Duke chad;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" private Ui ui;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" private TaskList tasklist;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" public Parser(Duke chad, ArrayList\u003cTask\u003e taskArrayList) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" this.chad \u003d chad;","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" this.ui \u003d new Ui();","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" this.storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" this.tasklist \u003d new TaskList(taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" public boolean inputParse(String[] inputArray) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray[0].equals(\"bye\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" ui.chadBye();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"list\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadListTask();","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadMarkTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" ui.chadMarkTaskOutput(chad.taskArrayList.get(index - 1).name,","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" chad.taskArrayList.get(index - 1).getMark());","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadUnmarkTask(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" ui.chadUnmarkTaskOutput(chad.taskArrayList.get(index - 1).name,","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" chad.taskArrayList.get(index - 1).getMark());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003d\u003d 1 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":" Todo newTodo \u003d new Todo(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newTodo);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newTodo.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003c 2 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" String[] details \u003d inputArray[1].split(\" /by \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" if (details.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Umm you forgot the deadline! Remember to use /by before the deadline!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":" Deadline newDeadline \u003d new Deadline(details[0], details[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newDeadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newDeadline.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Make sure the date format is: d MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"event\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":" if (inputArray.length \u003c 2 || inputArray[1].isEmpty()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey! You forgot what you needed to do?\");","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"DeltonCheng"},"content":" String[] details \u003d inputArray[1].split(\" /from \", 2);","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"DeltonCheng"},"content":" if (details.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"Hey you are missing the start date! Remember to use /from before the deadline!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"DeltonCheng"},"content":" String[] timings \u003d details[1].split(\" /to \", 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"DeltonCheng"},"content":" if (timings.length \u003c 2) {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"DeltonCheng"},"content":" throw new Duke.DukeException(\"The end date is missing! Do better! Use /to!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(timings[0]);","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(timings[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"DeltonCheng"},"content":" Event newEvent \u003d new Event(details[0], timings[0], timings[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"DeltonCheng"},"content":" tasklist.chadAddList(newEvent);","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"DeltonCheng"},"content":" ui.chadAddListOutput(newEvent.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"DeltonCheng"},"content":" } catch (Duke.DukeException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.getMessage() + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"DeltonCheng"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Make sure the date format is: d MMM yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"DeltonCheng"},"content":" } else if (inputArray[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"DeltonCheng"},"content":" Integer index \u003d Integer.valueOf(inputArray[1]);","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"DeltonCheng"},"content":" String name \u003d tasklist.chadRemoveList(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"DeltonCheng"},"content":" ui.chadRemoveOutput(name, chad.taskArrayList.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"DeltonCheng"},"content":" storage.writeFile(chad.taskArrayList);","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"DeltonCheng"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"The task index is invalid! Try again!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"DeltonCheng"},"content":" ui.chadOutput(\"Hmm? You are not making sense!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"DeltonCheng"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":140}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import tasks.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" private static final String FILE_PATH_NAME \u003d \"./data/chadBot.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public void makeNewDirectory() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" File newDir \u003d new File(\"./data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" if (newDir.mkdirs()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Data directory has been created successfully!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Data directory was not created! (There may already exists a data directory)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" public void makeNewFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" File newFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" if (newFile.createNewFile()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"I have created this file for you: \" + newFile.getName());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"You already have the file... Stop wasting my time\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"An error has occurred when creating the file: \" + e.getMessage());","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" public void printFile() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" File chadFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" Scanner s \u003d new Scanner(chadFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(s.nextLine());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" public void writeFile(ArrayList\u003cTask\u003e t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" FileWriter fw \u003d new FileWriter(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" for (Task task : t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" fw.write(task.taskToStringStore(task) + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":" fw.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"There was an error writing the file: \" + e);;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":" public Task stringToTask(String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"DeltonCheng"},"content":" String[] parts \u003d data.split(\"-\", 0);","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"DeltonCheng"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"DeltonCheng"},"content":" String marked \u003d parts[1].toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"DeltonCheng"},"content":" boolean mark \u003d marked.equals(\"X\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"DeltonCheng"},"content":" switch (type) {","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"DeltonCheng"},"content":" case \"T\":","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"DeltonCheng"},"content":" Todo t \u003d new Todo(parts[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"DeltonCheng"},"content":" t.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"DeltonCheng"},"content":" return t;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"DeltonCheng"},"content":" case \"D\":","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(parts[2], parts[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(d.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"DeltonCheng"},"content":" return d;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"DeltonCheng"},"content":" case \"E\":","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(parts[2], parts[3], parts[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d mark;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"DeltonCheng"},"content":" return e;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"DeltonCheng"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"DeltonCheng"},"content":" public void loadFile(ArrayList\u003cTask\u003e task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"DeltonCheng"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"DeltonCheng"},"content":" File chadFile \u003d new File(FILE_PATH_NAME);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"DeltonCheng"},"content":" Scanner s \u003d new Scanner(chadFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Here are the tasks from last time:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"DeltonCheng"},"content":" while (s.hasNext()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"DeltonCheng"},"content":" String nextTask \u003d s.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"DeltonCheng"},"content":" Task t \u003d stringToTask(nextTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"DeltonCheng"},"content":" if (t !\u003d null) {","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"DeltonCheng"},"content":" task.add(t);","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"DeltonCheng"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"File not found... Unable to load tasks\");","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":108}},{"path":"src/main/java/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate date;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" public Deadline(String name, String by) {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" this.date \u003d LocalDate.parse(by, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" String dateString \u003d this.date.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dateString + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" String dateString \u003d this.date.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" return \"D-\" + super.taskToStringStore(task) + dateString;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":27}},{"path":"src/main/java/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"public class Event extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate dateFrom;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public LocalDate dateTo;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public Event(String name, String from, String to) {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" this.dateFrom \u003d LocalDate.parse(from, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" this.dateTo \u003d LocalDate.parse(to, DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" String dateFromString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" String dateToString \u003d this.dateTo.format(DateTimeFormatter.ofPattern(\"dd.MM.yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" return \"[E]\" + super.toString() + \" (from: \" + dateFromString + \" to: \" + dateToString + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" String dateFromString \u003d this.dateFrom.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" String dateToString \u003d this.dateTo.format(DateTimeFormatter.ofPattern(\"d MMM yyyy\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" return \"E-\" + super.taskToStringStore(task) + dateFromString + \"-\" + dateToString ;","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":31}},{"path":"src/main/java/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"public class Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":" public String name;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":" public boolean isComplete;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" public Task(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" this.isComplete \u003d false;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public String getMark() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" return (isComplete ? \"X\" : \" \");","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" return \"[\" + getMark() + \"] \" + name;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" String isCompleteString \u003d (getMark() \u003d\u003d \"X\") ? \"X\" : \"O\";","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" return isCompleteString + \"-\" + task.name + \"-\";","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":25}},{"path":"src/main/java/tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":" public Todo(String name) {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":" super(name);","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" public String taskToStringStore(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" return \"T-\" + super.taskToStringStore(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":18}},{"path":"src/main/java/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"public class Ui {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":" String line \u003d \"~~*~~*~~*~~*~~*~~*~~*~~*~~*~~\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":" public void chadGreet() {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Yo! This is CHADbot\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Need sum help?\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" public void chadBye() {","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Cya l8r~\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" public void chadOutput(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public void chadAddListOutput(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \" has been added to yo list!\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public void chadExceptionOutput(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(input + \"\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":" public void chadRemoveOutput(String input, int size){","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Okay! I have removed this task :\\n\" + input);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" if (size \u003d\u003d 0){","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your list is currently empty! Good job :)\");","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Your list is currently \" + size + \" long... Get back to work!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" public void chadMarkTaskOutput(String task, String mark){","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Good job! tasks.Task fulfilled!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(task + \" [\" + mark + \"]\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":" public void chadUnmarkTaskOutput(String task, String mark){","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(\"Boooo! tasks.Task is not done!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(task + \" [\" + mark + \"]\\n\");","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"DeltonCheng"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"DeltonCheng":60}},{"path":"src/test/java/tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[D][ ] submit project (by: 12.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[D][X] submit project (by: 12.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringStoreTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"D-O-submit project-12 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.taskToStringStore(d));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringStoreTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"D-X-submit project-12 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.taskToStringStore(d));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_unmarked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" Deadline d \u003d new Deadline(\"submit project\", \"12 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" d.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"X\";","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, d.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"DeltonCheng":54}},{"path":"src/test/java/tasks/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"package tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"DeltonCheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"DeltonCheng"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"DeltonCheng"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"DeltonCheng"},"content":" public void eventToStringTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[E][ ] bootcamp (from: 12.10.2023 to: 15.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"DeltonCheng"},"content":" public void eventToStringTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"[E][X] bootcamp (from: 12.10.2023 to: 15.10.2023)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"DeltonCheng"},"content":" public void eventToStringStoreTest(){","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"E-O-bootcamp-12 Oct 2023-15 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.taskToStringStore(e));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineToStringStoreTest_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"E-X-bootcamp-12 Oct 2023-15 Oct 2023\";","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.taskToStringStore(e));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_unmarked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \" \";","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"DeltonCheng"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"DeltonCheng"},"content":" public void deadlineGetMark_marked(){","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"DeltonCheng"},"content":" Event e \u003d new Event(\"bootcamp\", \"12 Oct 2023\", \"15 Oct 2023\");","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"DeltonCheng"},"content":" e.isComplete \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"DeltonCheng"},"content":" String expected \u003d \"X\";","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"DeltonCheng"},"content":" assertEquals(expected, e.getMark());","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"DeltonCheng"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"DeltonCheng"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"DeltonCheng"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"DeltonCheng":53}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"DeltonCheng"},"content":"bye","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"DeltonCheng":1}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"DeltonCheng"},"content":"java -classpath ..\\bin 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":{"DeltonCheng":1,"-":20}}] diff --git a/DeltonCheng_ip_master/commits.json b/DeltonCheng_ip_master/commits.json index 3d115abc..5b455f9f 100644 --- a/DeltonCheng_ip_master/commits.json +++ b/DeltonCheng_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"DeltonCheng":[{"date":"2023-08-23","commitResults":[{"hash":"1e1e8b43d4549fb988b26d667e3b5aba4251362d","isMergeCommit":false,"messageTitle":"test 1 commit level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"dee5842fc15a7e275b9dd851c6261f1fba85cf0f","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":7}}},{"hash":"85aa774d1907edb91cdfdff4b2e9204aa7d0ba9a","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"2d0291e796a98d4bd7d31c9c6c7f92e5655a2f66","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"70a9652abd152fd72cc3c1839971fdeb48410b47","isMergeCommit":false,"messageTitle":"Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":8}}},{"hash":"6e080d31275a931e825c4b501bccab46eacf0f21","isMergeCommit":false,"messageTitle":"Level-5 Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":17}}},{"hash":"964e950a549a02631fec763c267cda27d66911a8","isMergeCommit":false,"messageTitle":"Level-6 Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"914e8120622c5fa4de941defd13343e1c3a9eb90","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"2c95477043b864d84a64b175e4fb3d69830da7be","isMergeCommit":false,"messageTitle":"Level-7 Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":10}}},{"hash":"2a4c9e4a37a001bf22a9912f1404c9a3944bde15","isMergeCommit":false,"messageTitle":"Level-8 Date and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"063a6e60ecf698e71b6e25b684b2d2c8347d5352","isMergeCommit":false,"messageTitle":"A-More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":469,"deletions":371}}},{"hash":"06e79bc7f429711c578606a87ec6116a5d1790a5","isMergeCommit":false,"messageTitle":"A-More OOP - some cleaning","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":9}}}]},{"date":"2023-09-02","commitResults":[{"hash":"22efb76eea4b203f28664ee6b88bc29e6e34ad54","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":4},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8951268847cff49c0c44d578b38fbc34f7839f8d","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"DeltonCheng":{"java":521,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":1}},"authorContributionVariance":{"DeltonCheng":47108.652},"authorDisplayNameMap":{"DeltonCheng":"CS2103T-W11-3 DELT.. ZHI"}} +{"authorDailyContributionsMap":{"DeltonCheng":[{"date":"2023-08-23","commitResults":[{"hash":"1e1e8b43d4549fb988b26d667e3b5aba4251362d","isMergeCommit":false,"messageTitle":"test 1 commit level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"dee5842fc15a7e275b9dd851c6261f1fba85cf0f","isMergeCommit":false,"messageTitle":"Level-1 Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":35,"deletions":7}}},{"hash":"85aa774d1907edb91cdfdff4b2e9204aa7d0ba9a","isMergeCommit":false,"messageTitle":"Level-2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":31,"deletions":1}}},{"hash":"2d0291e796a98d4bd7d31c9c6c7f92e5655a2f66","isMergeCommit":false,"messageTitle":"Level-3 Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"70a9652abd152fd72cc3c1839971fdeb48410b47","isMergeCommit":false,"messageTitle":"Level-4 ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":8}}},{"hash":"6e080d31275a931e825c4b501bccab46eacf0f21","isMergeCommit":false,"messageTitle":"Level-5 Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":17}}},{"hash":"964e950a549a02631fec763c267cda27d66911a8","isMergeCommit":false,"messageTitle":"Level-6 Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":8}}}]},{"date":"2023-08-26","commitResults":[{"hash":"914e8120622c5fa4de941defd13343e1c3a9eb90","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"2c95477043b864d84a64b175e4fb3d69830da7be","isMergeCommit":false,"messageTitle":"Level-7 Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":137,"deletions":10}}},{"hash":"2a4c9e4a37a001bf22a9912f1404c9a3944bde15","isMergeCommit":false,"messageTitle":"Level-8 Date and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":10}}}]},{"date":"2023-09-01","commitResults":[{"hash":"063a6e60ecf698e71b6e25b684b2d2c8347d5352","isMergeCommit":false,"messageTitle":"A-More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":469,"deletions":371}}},{"hash":"06e79bc7f429711c578606a87ec6116a5d1790a5","isMergeCommit":false,"messageTitle":"A-More OOP - some cleaning","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":9}}}]},{"date":"2023-09-02","commitResults":[{"hash":"22efb76eea4b203f28664ee6b88bc29e6e34ad54","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":4},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"8951268847cff49c0c44d578b38fbc34f7839f8d","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"f429314b4313c74a93e590765901c3226492eca8","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":112,"deletions":4}}},{"hash":"82fb58f71e64bfae2a07490a49e933a7f4c4bf0a","isMergeCommit":false,"messageTitle":"A-Jar","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"DeltonCheng":{"java":628,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":1}},"authorContributionVariance":{"DeltonCheng":47328.484},"authorDisplayNameMap":{"DeltonCheng":"CS2103T-W11-3 DELT.. ZHI"}} diff --git a/Eola-Z_ip_master/authorship.json b/Eola-Z_ip_master/authorship.json index 3ed6707c..e20da6de 100644 --- a/Eola-Z_ip_master/authorship.json +++ b/Eola-Z_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":" * A Task object with a deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" * Create task based on description and deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" * @param by Deadline of task","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":" * Get the description of the deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" * @return Description of task with its deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" return \"[D] \" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(by).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":32}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" * The main class controlling the chatbot\u0027s actions.","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" * This class should be able to keep track of tasks, and","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" * send messages to the user.","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":" * Common text elements to be reused by the chatbot, such as the chatbot name,","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" * and the horizontal line element.","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" private static final String name \u003d \"JOHNATHAN CENATOR\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":" private static final String horizontalLine \u003d \"-------------------------------\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":" * An array to store inputs by the user","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":" private static ArrayList\u003cTask\u003e taskArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" private static int numOfTasks \u003d 0;","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":" * An enum to track the status of the chatbot","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Eola-Z"},"content":" * RUNNING, STOPPING, etc.","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Eola-Z"},"content":" * [To add more if needed]","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Eola-Z"},"content":" enum Status {RUNNING, STOPPING}","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Eola-Z"},"content":" * Sends a greeting message on startup of the chatbot.","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"Eola-Z"},"content":" private static void greet() {","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Eola-Z"},"content":" \"YOU DIDN\u0027T SEE\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Eola-Z"},"content":" name +","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Eola-Z"},"content":" \"COMING DID YOU!?\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Eola-Z"},"content":" * Sends a departing message on chatbot shutdown.","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Eola-Z"},"content":" private static void exit() {","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"Eola-Z"},"content":" \"NOW GET OUTTA HERE!\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"Eola-Z"},"content":" \"RESPECTFULLY,\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"Eola-Z"},"content":" name +","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"Eola-Z"},"content":" * Repeats the user\u0027s input","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"Eola-Z"},"content":" * @param input the user\u0027s text input","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"Eola-Z"},"content":" private static void echo(String input) {","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine + input + \"\\n\" + horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"Eola-Z"},"content":" * Lists all tasks in the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"Eola-Z"},"content":" private static void list() {","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"Eola-Z"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"Eola-Z"},"content":" for (Task task : taskArray) {","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"Eola-Z"},"content":" if (task \u003d\u003d null) break;","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"Eola-Z"},"content":" System.out.println(count++ + \". \" + task.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":79,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"Eola-Z"},"content":" * Appends a task to the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":84,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"Eola-Z"},"content":" * @param task The task inputted by the user","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"Eola-Z"},"content":" private static void append(Task task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"Eola-Z"},"content":" taskArray.add(task);","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"Eola-Z"},"content":" numOfTasks++;","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine + \"YOU WANT TO \" + task + \"?\\nSURE, WHATEVER.\\n\" + horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":91,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"Eola-Z"},"content":" * Converts the string into a ToDo object","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"Eola-Z"},"content":" * then appends it to the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"Eola-Z"},"content":" * @param task description of task","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"Eola-Z"},"content":" private static void appendToDo(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":101,"author":{"gitId":"Eola-Z"},"content":" String todo \u003d task.substring(5);","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"Eola-Z"},"content":" append(new ToDo(todo));","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"Eola-Z"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"Eola-Z"},"content":" \"WRONG FORMAT FOOL!!! IT\u0027S:\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"Eola-Z"},"content":" \"todo {task}\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":108,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":110,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"Eola-Z"},"content":" * Converts the string into a Deadline object","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"Eola-Z"},"content":" * then appends it to the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":115,"author":{"gitId":"Eola-Z"},"content":" * @param task description of task with \u0027by\u0027 time","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":117,"author":{"gitId":"Eola-Z"},"content":" private static void appendDeadline(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"Eola-Z"},"content":" String deadline \u003d task.substring(9);","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"Eola-Z"},"content":" int splitPoint \u003d deadline.indexOf(\" /by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":121,"author":{"gitId":"Eola-Z"},"content":" append(new Deadline(deadline.substring(0, splitPoint),","lastModifiedDate":"2023-08-25"},{"lineNumber":122,"author":{"gitId":"Eola-Z"},"content":" deadline.substring(splitPoint + 5)));","lastModifiedDate":"2023-08-25"},{"lineNumber":123,"author":{"gitId":"Eola-Z"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"Eola-Z"},"content":" \"WRONG FORMAT FOOL!!! IT\u0027S:\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"Eola-Z"},"content":" \"deadline {task} /by {time}\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"Eola-Z"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":129,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine + \"Date format should be yyyy-mm-dd\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Eola-Z"},"content":" + horizontalLine);","lastModifiedDate":"2023-08-31"},{"lineNumber":131,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":133,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Eola-Z"},"content":" * Converts the string into an Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Eola-Z"},"content":" * then appends it to the task array","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Eola-Z"},"content":" * @param task description of task with \u0027from\u0027 time and \u0027to\u0027 time","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Eola-Z"},"content":" private static void appendEvent(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":142,"author":{"gitId":"Eola-Z"},"content":" String event \u003d task.substring(6);","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"Eola-Z"},"content":" int startPoint \u003d event.indexOf(\" /from \");","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"Eola-Z"},"content":" int endPoint \u003d event.indexOf(\" /to \");","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"Eola-Z"},"content":" append(new Event(event.substring(0, startPoint),","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"Eola-Z"},"content":" event.substring(startPoint + 7, endPoint),","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"Eola-Z"},"content":" event.substring(endPoint + 5)));","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"Eola-Z"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"Eola-Z"},"content":" \"WRONG FORMAT FOOL!!! IT\u0027S:\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"Eola-Z"},"content":" \"event {task} /from {time} /to {time}\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"Eola-Z"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":154,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine + \"Date format should be yyyy-mm-dd\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Eola-Z"},"content":" + horizontalLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"Eola-Z"},"content":" * Attempts to mark a task in the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":161,"author":{"gitId":"Eola-Z"},"content":" * @param toMark","lastModifiedDate":"2023-08-25"},{"lineNumber":162,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":163,"author":{"gitId":"Eola-Z"},"content":" private static void mark(String toMark) {","lastModifiedDate":"2023-08-25"},{"lineNumber":164,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":165,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"Eola-Z"},"content":" Task task \u003d taskArray.get(Integer.parseInt(toMark.substring(5)) - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"Eola-Z"},"content":" if (task \u003d\u003d null) throw new NullPointerException();","lastModifiedDate":"2023-08-25"},{"lineNumber":168,"author":{"gitId":"Eola-Z"},"content":" if (task.isDone) throw new IllegalArgumentException();","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"Eola-Z"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-25"},{"lineNumber":170,"author":{"gitId":"Eola-Z"},"content":" System.out.println(\"MARKED:\\n\" + task);","lastModifiedDate":"2023-08-25"},{"lineNumber":171,"author":{"gitId":"Eola-Z"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":172,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOT A NUMBER IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":173,"author":{"gitId":"Eola-Z"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":174,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOTHING THERE IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":175,"author":{"gitId":"Eola-Z"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":176,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"ALREADY DONE BRO!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":177,"author":{"gitId":"Eola-Z"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":179,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":180,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":181,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":182,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":183,"author":{"gitId":"Eola-Z"},"content":" * Attempts to unmark a task in the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":184,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"Eola-Z"},"content":" * @param toUnmark the task to be unmarked","lastModifiedDate":"2023-08-25"},{"lineNumber":186,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":187,"author":{"gitId":"Eola-Z"},"content":" private static void unmark(String toUnmark) {","lastModifiedDate":"2023-08-25"},{"lineNumber":188,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":189,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":190,"author":{"gitId":"Eola-Z"},"content":" int index \u003d Integer.parseInt(toUnmark.substring(7)) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":191,"author":{"gitId":"Eola-Z"},"content":" Task task \u003d taskArray.get(index);","lastModifiedDate":"2023-08-25"},{"lineNumber":192,"author":{"gitId":"Eola-Z"},"content":" if (task \u003d\u003d null) throw new NullPointerException();","lastModifiedDate":"2023-08-25"},{"lineNumber":193,"author":{"gitId":"Eola-Z"},"content":" if (!task.isDone) throw new IllegalArgumentException();","lastModifiedDate":"2023-08-25"},{"lineNumber":194,"author":{"gitId":"Eola-Z"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-25"},{"lineNumber":195,"author":{"gitId":"Eola-Z"},"content":" System.out.println(\"UNMARKED:\\n\" + task);","lastModifiedDate":"2023-08-25"},{"lineNumber":196,"author":{"gitId":"Eola-Z"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":197,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOT A NUMBER IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":198,"author":{"gitId":"Eola-Z"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":199,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOTHING THERE IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":200,"author":{"gitId":"Eola-Z"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":201,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"ALREADY UNDONE BRO!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":202,"author":{"gitId":"Eola-Z"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":203,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":204,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":205,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":206,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":207,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":208,"author":{"gitId":"Eola-Z"},"content":" * Attempts to delete a task from the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":209,"author":{"gitId":"Eola-Z"},"content":" * @param toDelete","lastModifiedDate":"2023-08-25"},{"lineNumber":210,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":211,"author":{"gitId":"Eola-Z"},"content":" private static void delete(String toDelete) {","lastModifiedDate":"2023-08-25"},{"lineNumber":212,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":213,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":214,"author":{"gitId":"Eola-Z"},"content":" int index \u003d Integer.parseInt(toDelete.substring(7)) - 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":215,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"YOU SEE THIS?\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":216,"author":{"gitId":"Eola-Z"},"content":" taskArray.get(index) +","lastModifiedDate":"2023-08-25"},{"lineNumber":217,"author":{"gitId":"Eola-Z"},"content":" \"\\nNOW YOU DON\u0027T\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":218,"author":{"gitId":"Eola-Z"},"content":" taskArray.remove(index);","lastModifiedDate":"2023-08-25"},{"lineNumber":219,"author":{"gitId":"Eola-Z"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":220,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOT A NUMBER IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":221,"author":{"gitId":"Eola-Z"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":222,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"YOU WANT ME TO DELETE THE AIR???\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":223,"author":{"gitId":"Eola-Z"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":224,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":225,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":226,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":227,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":228,"author":{"gitId":"Eola-Z"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"Eola-Z"},"content":" greet();","lastModifiedDate":"2023-08-25"},{"lineNumber":230,"author":{"gitId":"Eola-Z"},"content":" Scanner textInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":231,"author":{"gitId":"Eola-Z"},"content":" Status botStatus \u003d Status.RUNNING;","lastModifiedDate":"2023-08-25"},{"lineNumber":232,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":233,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":234,"author":{"gitId":"Eola-Z"},"content":" // Get directory of data","lastModifiedDate":"2023-08-31"},{"lineNumber":235,"author":{"gitId":"Eola-Z"},"content":" Path path \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-31"},{"lineNumber":236,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":237,"author":{"gitId":"Eola-Z"},"content":" // Make new directory if it doesn\u0027t exist","lastModifiedDate":"2023-08-31"},{"lineNumber":238,"author":{"gitId":"Eola-Z"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"Eola-Z"},"content":" Files.createDirectories(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"Eola-Z"},"content":" System.out.println(\"Directory is created!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":242,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"Eola-Z"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":244,"author":{"gitId":"Eola-Z"},"content":" System.err.println(\"Failed to create directory!\" + e.getMessage());","lastModifiedDate":"2023-08-31"},{"lineNumber":245,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":246,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":247,"author":{"gitId":"Eola-Z"},"content":" // Accesses the text file or creates one if it doesn\u0027t exist","lastModifiedDate":"2023-08-31"},{"lineNumber":248,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":249,"author":{"gitId":"Eola-Z"},"content":" FileReader fr \u003d new FileReader(\"./data/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":250,"author":{"gitId":"Eola-Z"},"content":" int c;","lastModifiedDate":"2023-08-31"},{"lineNumber":251,"author":{"gitId":"Eola-Z"},"content":" String savedTasks \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":252,"author":{"gitId":"Eola-Z"},"content":" while ((c\u003dfr.read()) !\u003d -1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":253,"author":{"gitId":"Eola-Z"},"content":" savedTasks +\u003d (char) c;","lastModifiedDate":"2023-08-31"},{"lineNumber":254,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":255,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":256,"author":{"gitId":"Eola-Z"},"content":" String[] taskList \u003d new String[100];","lastModifiedDate":"2023-08-31"},{"lineNumber":257,"author":{"gitId":"Eola-Z"},"content":" for (String task : savedTasks.split(\";\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":258,"author":{"gitId":"Eola-Z"},"content":" String[] taskDetails \u003d task.split(\"/\");","lastModifiedDate":"2023-08-31"},{"lineNumber":259,"author":{"gitId":"Eola-Z"},"content":" Task savedTask;","lastModifiedDate":"2023-08-31"},{"lineNumber":260,"author":{"gitId":"Eola-Z"},"content":" switch(taskDetails[0]) {","lastModifiedDate":"2023-08-31"},{"lineNumber":261,"author":{"gitId":"Eola-Z"},"content":" case \"T\":","lastModifiedDate":"2023-08-31"},{"lineNumber":262,"author":{"gitId":"Eola-Z"},"content":" savedTask \u003d new ToDo(taskDetails[2]);","lastModifiedDate":"2023-08-31"},{"lineNumber":263,"author":{"gitId":"Eola-Z"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":264,"author":{"gitId":"Eola-Z"},"content":" case \"D\":","lastModifiedDate":"2023-08-31"},{"lineNumber":265,"author":{"gitId":"Eola-Z"},"content":" savedTask \u003d new Deadline(taskDetails[2], taskDetails[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":266,"author":{"gitId":"Eola-Z"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":267,"author":{"gitId":"Eola-Z"},"content":" case \"E\":","lastModifiedDate":"2023-08-31"},{"lineNumber":268,"author":{"gitId":"Eola-Z"},"content":" savedTask \u003d new Event(taskDetails[2], taskDetails[3], taskDetails[4]);","lastModifiedDate":"2023-08-31"},{"lineNumber":269,"author":{"gitId":"Eola-Z"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":270,"author":{"gitId":"Eola-Z"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":271,"author":{"gitId":"Eola-Z"},"content":" savedTask \u003d new Task(taskDetails[0]);","lastModifiedDate":"2023-08-31"},{"lineNumber":272,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":273,"author":{"gitId":"Eola-Z"},"content":" if (Integer.parseInt(taskDetails[1]) \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":274,"author":{"gitId":"Eola-Z"},"content":" savedTask.markAsDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":275,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":276,"author":{"gitId":"Eola-Z"},"content":" taskArray.add(savedTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":277,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":278,"author":{"gitId":"Eola-Z"},"content":" } catch (FileNotFoundException fe) {","lastModifiedDate":"2023-08-31"},{"lineNumber":279,"author":{"gitId":"Eola-Z"},"content":" System.out.println(\"File not found, creating new text file...\");","lastModifiedDate":"2023-08-31"},{"lineNumber":280,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":281,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":282,"author":{"gitId":"Eola-Z"},"content":" while (botStatus \u003d\u003d Status.RUNNING) {","lastModifiedDate":"2023-08-25"},{"lineNumber":283,"author":{"gitId":"Eola-Z"},"content":" String nextLine \u003d textInput.nextLine();","lastModifiedDate":"2023-08-25"},{"lineNumber":284,"author":{"gitId":"Eola-Z"},"content":" if (nextLine.startsWith(\"mark\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":285,"author":{"gitId":"Eola-Z"},"content":" mark(nextLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":286,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":287,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":288,"author":{"gitId":"Eola-Z"},"content":" if (nextLine.startsWith(\"unmark\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":289,"author":{"gitId":"Eola-Z"},"content":" unmark(nextLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":290,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":291,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":292,"author":{"gitId":"Eola-Z"},"content":" if (nextLine.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":293,"author":{"gitId":"Eola-Z"},"content":" appendToDo(nextLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":294,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":295,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":296,"author":{"gitId":"Eola-Z"},"content":" if (nextLine.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":297,"author":{"gitId":"Eola-Z"},"content":" appendDeadline(nextLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":298,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":299,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":300,"author":{"gitId":"Eola-Z"},"content":" if (nextLine.startsWith(\"event\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":301,"author":{"gitId":"Eola-Z"},"content":" appendEvent(nextLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":302,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":303,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":304,"author":{"gitId":"Eola-Z"},"content":" if (nextLine.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":305,"author":{"gitId":"Eola-Z"},"content":" delete(nextLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":306,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":307,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":308,"author":{"gitId":"Eola-Z"},"content":" switch(nextLine) {","lastModifiedDate":"2023-08-25"},{"lineNumber":309,"author":{"gitId":"Eola-Z"},"content":" case \"bye\":","lastModifiedDate":"2023-08-25"},{"lineNumber":310,"author":{"gitId":"Eola-Z"},"content":" botStatus \u003d Status.STOPPING;","lastModifiedDate":"2023-08-25"},{"lineNumber":311,"author":{"gitId":"Eola-Z"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":312,"author":{"gitId":"Eola-Z"},"content":" case \"list\":","lastModifiedDate":"2023-08-25"},{"lineNumber":313,"author":{"gitId":"Eola-Z"},"content":" list();","lastModifiedDate":"2023-08-25"},{"lineNumber":314,"author":{"gitId":"Eola-Z"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":315,"author":{"gitId":"Eola-Z"},"content":" default:","lastModifiedDate":"2023-08-25"},{"lineNumber":316,"author":{"gitId":"Eola-Z"},"content":" append(new Task(nextLine));","lastModifiedDate":"2023-08-25"},{"lineNumber":317,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":318,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":319,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":320,"author":{"gitId":"Eola-Z"},"content":" FileWriter fw \u003d new FileWriter(\"./data/duke.txt\");","lastModifiedDate":"2023-08-31"},{"lineNumber":321,"author":{"gitId":"Eola-Z"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":322,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":323,"author":{"gitId":"Eola-Z"},"content":" for (Task taskToSave : taskArray) {","lastModifiedDate":"2023-08-31"},{"lineNumber":324,"author":{"gitId":"Eola-Z"},"content":" String taskType;","lastModifiedDate":"2023-08-31"},{"lineNumber":325,"author":{"gitId":"Eola-Z"},"content":" String taskAppendices \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":326,"author":{"gitId":"Eola-Z"},"content":" if (taskToSave instanceof ToDo) {","lastModifiedDate":"2023-08-31"},{"lineNumber":327,"author":{"gitId":"Eola-Z"},"content":" taskType \u003d \"T/\";","lastModifiedDate":"2023-08-31"},{"lineNumber":328,"author":{"gitId":"Eola-Z"},"content":" taskAppendices \u003d \"/\" + taskToSave.description;","lastModifiedDate":"2023-08-31"},{"lineNumber":329,"author":{"gitId":"Eola-Z"},"content":" } else if (taskToSave instanceof Deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":330,"author":{"gitId":"Eola-Z"},"content":" taskType \u003d \"D/\";","lastModifiedDate":"2023-08-31"},{"lineNumber":331,"author":{"gitId":"Eola-Z"},"content":" taskAppendices \u003d \"/\" + taskToSave.description + \"/\" + ((Deadline) taskToSave).by;","lastModifiedDate":"2023-08-31"},{"lineNumber":332,"author":{"gitId":"Eola-Z"},"content":" } else if (taskToSave instanceof Event) {","lastModifiedDate":"2023-08-31"},{"lineNumber":333,"author":{"gitId":"Eola-Z"},"content":" taskType \u003d \"E/\";","lastModifiedDate":"2023-08-31"},{"lineNumber":334,"author":{"gitId":"Eola-Z"},"content":" taskAppendices \u003d \"/\" + taskToSave.description + \"/\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":335,"author":{"gitId":"Eola-Z"},"content":" ((Event) taskToSave).from + \"/\" + ((Event) taskToSave).to;","lastModifiedDate":"2023-08-31"},{"lineNumber":336,"author":{"gitId":"Eola-Z"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":337,"author":{"gitId":"Eola-Z"},"content":" taskType \u003d taskToSave.description + \"/\";","lastModifiedDate":"2023-08-31"},{"lineNumber":338,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":339,"author":{"gitId":"Eola-Z"},"content":" out +\u003d taskType + (taskToSave.isDone ? 1 : 0) + taskAppendices + \";\";","lastModifiedDate":"2023-08-31"},{"lineNumber":340,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":341,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":342,"author":{"gitId":"Eola-Z"},"content":" fw.write(out);","lastModifiedDate":"2023-08-31"},{"lineNumber":343,"author":{"gitId":"Eola-Z"},"content":" fw.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":344,"author":{"gitId":"Eola-Z"},"content":" exit();","lastModifiedDate":"2023-08-25"},{"lineNumber":345,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":346,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Eola-Z":343,"-":3}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":" * A Task object that contains a start and end time","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":" * Create an Event Task based on description, start time and","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" * end time","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" * @param description","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" * @param from","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" * @param to","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(from);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(to);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":" * Get description of the event","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":" * @return description of task, start and end time","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Eola-Z"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Eola-Z"},"content":" return \"[E] \" + super.toString() + \" (from: \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(from).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" to: \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(to).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":38}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":" * A class containing information about each task","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":" * They have a name, and a boolean to check","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":" * whether the task is done","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":" protected String description;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" * Create task based on description","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":" * Returns a string depending on whether the task is done","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":" * @return X if the task is done, a space if it isn\u0027t","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":" * Mark the task as complete/incomplete respectively","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Eola-Z"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"Eola-Z"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Eola-Z"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"Eola-Z"},"content":" * Get the description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Eola-Z"},"content":" * @return The description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Eola-Z"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Eola-Z"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Eola-Z"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":48}},{"path":"src/main/java/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":" * A Task object with the \"T\" label","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" * Get the description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":" * @return The description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" public String toString(){","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":19}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"event","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"event 123","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"event 123 /from tuesday","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"event 123 /from tuesday /to saturday","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"todo","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"todo mark","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":"deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":"deadline mark friday","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":"deadline mark /by friday","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":"mark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":"unmark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":"unmark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":"delete 3","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":"delete 3","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":"delete 2","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":"todo what why","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":24}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"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":"Eola-Z"},"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":{"Eola-Z":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":"Eola-Z"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Eola-Z":1,"-":41}},{"path":"src/main/java/duke/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":" * A duke.Task object with a deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" * Create task based on description and deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" * @param by duke.Deadline of task","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(by);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" * Get the description of the deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":" * @return Description of task with its deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":" return \"[D] \" + super.toString() + \" (by: \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(by).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":34}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":" * The main class controlling the chatbot\u0027s actions.","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":" * This class should be able to keep track of tasks, and","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" * send messages to the user.","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" * Common text elements to be reused by the chatbot, such as the chatbot name,","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" * and the horizontal line element.","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" private static final String name \u003d \"JOHNATHAN CENATOR\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" private static final String horizontalLine \u003d \"-------------------------------\\n\";","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":" * Store tasks in a separate class","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":" private static Storage taskStorage \u003d new Storage();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":" * An enum to track the status of the chatbot","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":" * RUNNING, STOPPING, etc.","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":" * [To add more if needed]","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":" enum Status {RUNNING, STOPPING}","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Eola-Z"},"content":" * Sends a greeting message on startup of the chatbot.","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"Eola-Z"},"content":" private static void greet() {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"Eola-Z"},"content":" \"YOU DIDN\u0027T SEE\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"Eola-Z"},"content":" name +","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Eola-Z"},"content":" \"COMING DID YOU!?\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Eola-Z"},"content":" * Sends a departing message on chatbot shutdown.","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Eola-Z"},"content":" private static void exit() {","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Eola-Z"},"content":" \"NOW GET OUTTA HERE!\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"Eola-Z"},"content":" \"RESPECTFULLY,\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Eola-Z"},"content":" name +","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"Eola-Z"},"content":" * Repeats the user\u0027s input","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":57,"author":{"gitId":"Eola-Z"},"content":" * @param input the user\u0027s text input","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":59,"author":{"gitId":"Eola-Z"},"content":" private static void echo(String input) {","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine + input + \"\\n\" + horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":61,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":62,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":64,"author":{"gitId":"Eola-Z"},"content":" * Lists all tasks in the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":66,"author":{"gitId":"Eola-Z"},"content":" private static void list() {","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"Eola-Z"},"content":" System.out.print(taskStorage.list());","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":70,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":72,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":73,"author":{"gitId":"Eola-Z"},"content":" * Appends a task to the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":74,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":75,"author":{"gitId":"Eola-Z"},"content":" * @param task The task inputted by the user","lastModifiedDate":"2023-08-25"},{"lineNumber":76,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":77,"author":{"gitId":"Eola-Z"},"content":" private static void append(Task task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":78,"author":{"gitId":"Eola-Z"},"content":" taskStorage.appendTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine + \"YOU WANT TO \" + task + \"?\\nSURE, WHATEVER.\\n\" + horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":81,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":82,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"Eola-Z"},"content":" * Converts the string into a duke.ToDo object","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Eola-Z"},"content":" * then appends it to the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":85,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"Eola-Z"},"content":" * @param task description of task","lastModifiedDate":"2023-08-25"},{"lineNumber":87,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"Eola-Z"},"content":" private static void appendToDo(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":89,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":90,"author":{"gitId":"Eola-Z"},"content":" append(new ToDo(Parser.parseToDo(task)));","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Eola-Z"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":92,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":93,"author":{"gitId":"Eola-Z"},"content":" \"WRONG FORMAT FOOL!!! IT\u0027S:\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":94,"author":{"gitId":"Eola-Z"},"content":" \"todo {task}\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":95,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":96,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":97,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":98,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":99,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":100,"author":{"gitId":"Eola-Z"},"content":" * Converts the string into a duke.Deadline object","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Eola-Z"},"content":" * then appends it to the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":102,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":103,"author":{"gitId":"Eola-Z"},"content":" * @param task description of task with \u0027by\u0027 time","lastModifiedDate":"2023-08-25"},{"lineNumber":104,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":105,"author":{"gitId":"Eola-Z"},"content":" private static void appendDeadline(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":106,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":107,"author":{"gitId":"Eola-Z"},"content":" String[] parsedDeadline \u003d Parser.parseDeadline(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Eola-Z"},"content":" append(new Deadline(parsedDeadline[0], parsedDeadline[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Eola-Z"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":110,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"Eola-Z"},"content":" \"WRONG FORMAT FOOL!!! IT\u0027S:\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"Eola-Z"},"content":" \"deadline {task} /by {time}\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":113,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"Eola-Z"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine + \"Date format should be yyyy-mm-dd\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Eola-Z"},"content":" + horizontalLine);","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":118,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":119,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":120,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Eola-Z"},"content":" * Converts the string into an duke.Event object","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Eola-Z"},"content":" * then appends it to the task array","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Eola-Z"},"content":" * @param task description of task with \u0027from\u0027 time and \u0027to\u0027 time","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Eola-Z"},"content":" private static void appendEvent(String task) {","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"Eola-Z"},"content":" String[] parsedEvent \u003d Parser.parseEvent(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Eola-Z"},"content":" append(new Event(parsedEvent[0], parsedEvent[1], parsedEvent[2]));","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Eola-Z"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":131,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine +","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"Eola-Z"},"content":" \"WRONG FORMAT FOOL!!! IT\u0027S:\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":133,"author":{"gitId":"Eola-Z"},"content":" \"event {task} /from {time} /to {time}\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"Eola-Z"},"content":" horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":135,"author":{"gitId":"Eola-Z"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine + \"Date format should be yyyy-mm-dd\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Eola-Z"},"content":" + horizontalLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":139,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":140,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":141,"author":{"gitId":"Eola-Z"},"content":" * Attempts to mark a task in the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":142,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":143,"author":{"gitId":"Eola-Z"},"content":" * @param toMark","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"Eola-Z"},"content":" private static void mark(String toMark) {","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"Eola-Z"},"content":" Task task \u003d taskStorage.get(Parser.parseMark(toMark));","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Eola-Z"},"content":" if (task \u003d\u003d null) throw new NullPointerException();","lastModifiedDate":"2023-08-25"},{"lineNumber":150,"author":{"gitId":"Eola-Z"},"content":" if (task.isDone) throw new IllegalArgumentException();","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"Eola-Z"},"content":" task.markAsDone();","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"Eola-Z"},"content":" System.out.println(\"MARKED:\\n\" + task);","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"Eola-Z"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOT A NUMBER IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"Eola-Z"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOTHING THERE IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"Eola-Z"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOTHING THERE IDIOT!!!\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Eola-Z"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"ALREADY DONE BRO!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":161,"author":{"gitId":"Eola-Z"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":162,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":163,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":164,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":165,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":166,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":167,"author":{"gitId":"Eola-Z"},"content":" * Attempts to unmark a task in the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":168,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"Eola-Z"},"content":" * @param toUnmark the task to be unmarked","lastModifiedDate":"2023-08-25"},{"lineNumber":170,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":171,"author":{"gitId":"Eola-Z"},"content":" private static void unmark(String toUnmark) {","lastModifiedDate":"2023-08-25"},{"lineNumber":172,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":173,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":174,"author":{"gitId":"Eola-Z"},"content":" Task task \u003d taskStorage.get(Parser.parseUnmark(toUnmark));","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"Eola-Z"},"content":" if (task \u003d\u003d null) throw new NullPointerException();","lastModifiedDate":"2023-08-25"},{"lineNumber":176,"author":{"gitId":"Eola-Z"},"content":" if (!task.isDone) throw new IllegalArgumentException();","lastModifiedDate":"2023-08-25"},{"lineNumber":177,"author":{"gitId":"Eola-Z"},"content":" task.markAsUndone();","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"Eola-Z"},"content":" System.out.println(\"UNMARKED:\\n\" + task);","lastModifiedDate":"2023-08-25"},{"lineNumber":179,"author":{"gitId":"Eola-Z"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":180,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOT A NUMBER IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":181,"author":{"gitId":"Eola-Z"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":182,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOTHING THERE IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":183,"author":{"gitId":"Eola-Z"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOTHING THERE IDIOT!!!\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"Eola-Z"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":186,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"ALREADY UNDONE BRO!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":187,"author":{"gitId":"Eola-Z"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":188,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":189,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":190,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":191,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":192,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":193,"author":{"gitId":"Eola-Z"},"content":" * Attempts to delete a task from the task array","lastModifiedDate":"2023-08-25"},{"lineNumber":194,"author":{"gitId":"Eola-Z"},"content":" * @param toDelete","lastModifiedDate":"2023-08-25"},{"lineNumber":195,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":196,"author":{"gitId":"Eola-Z"},"content":" private static void delete(String toDelete) {","lastModifiedDate":"2023-08-25"},{"lineNumber":197,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":198,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":199,"author":{"gitId":"Eola-Z"},"content":" int index \u003d Parser.parseDelete(toDelete);","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"YOU SEE THIS?\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":201,"author":{"gitId":"Eola-Z"},"content":" taskStorage.get(index) +","lastModifiedDate":"2023-09-02"},{"lineNumber":202,"author":{"gitId":"Eola-Z"},"content":" \"\\nNOW YOU DON\u0027T\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":203,"author":{"gitId":"Eola-Z"},"content":" taskStorage.delete(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":204,"author":{"gitId":"Eola-Z"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":205,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"NOT A NUMBER IDIOT!!!\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":206,"author":{"gitId":"Eola-Z"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":207,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"YOU WANT ME TO DELETE THE AIR???\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":208,"author":{"gitId":"Eola-Z"},"content":" } finally {","lastModifiedDate":"2023-08-25"},{"lineNumber":209,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":210,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":211,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":212,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":213,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":214,"author":{"gitId":"Eola-Z"},"content":" * List all tasks that have a specific keyphrase","lastModifiedDate":"2023-09-03"},{"lineNumber":215,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":216,"author":{"gitId":"Eola-Z"},"content":" * @param search a keyphrase used to check with the database of tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":217,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":218,"author":{"gitId":"Eola-Z"},"content":" public static void find(String search) {","lastModifiedDate":"2023-09-03"},{"lineNumber":219,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":220,"author":{"gitId":"Eola-Z"},"content":" System.out.print(\"THIS WHAT YOU\u0027RE LOOKING FOR?\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":221,"author":{"gitId":"Eola-Z"},"content":" System.out.print(taskStorage.find(Parser.parseFind(search)));","lastModifiedDate":"2023-09-03"},{"lineNumber":222,"author":{"gitId":"Eola-Z"},"content":" System.out.print(horizontalLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":223,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":224,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":225,"author":{"gitId":"Eola-Z"},"content":" public static void main(String[] args) throws IOException {","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"Eola-Z"},"content":" greet();","lastModifiedDate":"2023-08-25"},{"lineNumber":227,"author":{"gitId":"Eola-Z"},"content":" Scanner textInput \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":228,"author":{"gitId":"Eola-Z"},"content":" Status botStatus \u003d Status.RUNNING;","lastModifiedDate":"2023-08-25"},{"lineNumber":229,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":230,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":231,"author":{"gitId":"Eola-Z"},"content":" while (botStatus \u003d\u003d Status.RUNNING) {","lastModifiedDate":"2023-08-25"},{"lineNumber":232,"author":{"gitId":"Eola-Z"},"content":" String nextLine \u003d textInput.nextLine();","lastModifiedDate":"2023-08-25"},{"lineNumber":233,"author":{"gitId":"Eola-Z"},"content":" Parser.ParserOutput signal \u003d Parser.parseInput(nextLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":234,"author":{"gitId":"Eola-Z"},"content":" switch (signal) {","lastModifiedDate":"2023-09-02"},{"lineNumber":235,"author":{"gitId":"Eola-Z"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":236,"author":{"gitId":"Eola-Z"},"content":" mark(nextLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":237,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":238,"author":{"gitId":"Eola-Z"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":239,"author":{"gitId":"Eola-Z"},"content":" unmark(nextLine);","lastModifiedDate":"2023-08-25"},{"lineNumber":240,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":241,"author":{"gitId":"Eola-Z"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":242,"author":{"gitId":"Eola-Z"},"content":" delete(nextLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":243,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":244,"author":{"gitId":"Eola-Z"},"content":" case LIST:","lastModifiedDate":"2023-09-02"},{"lineNumber":245,"author":{"gitId":"Eola-Z"},"content":" list();","lastModifiedDate":"2023-09-02"},{"lineNumber":246,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":247,"author":{"gitId":"Eola-Z"},"content":" case ECHO:","lastModifiedDate":"2023-09-02"},{"lineNumber":248,"author":{"gitId":"Eola-Z"},"content":" echo(nextLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":249,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-08-25"},{"lineNumber":250,"author":{"gitId":"Eola-Z"},"content":" case EXIT:","lastModifiedDate":"2023-09-02"},{"lineNumber":251,"author":{"gitId":"Eola-Z"},"content":" botStatus \u003d Status.STOPPING;","lastModifiedDate":"2023-08-25"},{"lineNumber":252,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":253,"author":{"gitId":"Eola-Z"},"content":" case FIND:","lastModifiedDate":"2023-09-03"},{"lineNumber":254,"author":{"gitId":"Eola-Z"},"content":" find(nextLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":255,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-09-03"},{"lineNumber":256,"author":{"gitId":"Eola-Z"},"content":" case APPEND:","lastModifiedDate":"2023-09-02"},{"lineNumber":257,"author":{"gitId":"Eola-Z"},"content":" Parser.TaskType type \u003d Parser.parseTask(nextLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":258,"author":{"gitId":"Eola-Z"},"content":" switch (type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":259,"author":{"gitId":"Eola-Z"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":260,"author":{"gitId":"Eola-Z"},"content":" appendToDo(nextLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":261,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-09-03"},{"lineNumber":262,"author":{"gitId":"Eola-Z"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":263,"author":{"gitId":"Eola-Z"},"content":" appendEvent(nextLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":264,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-09-03"},{"lineNumber":265,"author":{"gitId":"Eola-Z"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":266,"author":{"gitId":"Eola-Z"},"content":" appendDeadline(nextLine);","lastModifiedDate":"2023-09-03"},{"lineNumber":267,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-09-03"},{"lineNumber":268,"author":{"gitId":"Eola-Z"},"content":" case GENERIC:","lastModifiedDate":"2023-09-02"},{"lineNumber":269,"author":{"gitId":"Eola-Z"},"content":" append(new Task(nextLine));","lastModifiedDate":"2023-08-25"},{"lineNumber":270,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":271,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":272,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":273,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":274,"author":{"gitId":"Eola-Z"},"content":" taskStorage.write();","lastModifiedDate":"2023-09-02"},{"lineNumber":275,"author":{"gitId":"Eola-Z"},"content":" exit();","lastModifiedDate":"2023-08-25"},{"lineNumber":276,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":277,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Eola-Z":274,"-":3}},{"path":"src/main/java/duke/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":" * A duke.Task object that contains a start and end time","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" * Create an duke.Event duke.Task based on description, start time and","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" * end time","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" * @param description","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" * @param from","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":" * @param to","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(from);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(to);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":" * Get description of the event","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":" * @return description of task, start and end time","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Eola-Z"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"Eola-Z"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Eola-Z"},"content":" return \"[E] \" + super.toString() + \" (from: \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(from).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \" to: \" +","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Eola-Z"},"content":" LocalDate.parse(to).format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":40}},{"path":"src/main/java/duke/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":" * Parse text input from the user and feeds it to the UI","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" enum ParserOutput {DELETE, MARK, UNMARK, APPEND, LIST, ECHO, EXIT, FIND}","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" enum TaskType {TODO, EVENT, DEADLINE, GENERIC}","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" * Parse the initial input by the user to determine future action","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" * @param input the text typed by the user","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" * @return An enum which indicates what the UI should do next","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":" public static ParserOutput parseInput(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" if (input.startsWith(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":" return ParserOutput.MARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":" if (input.startsWith(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":" return ParserOutput.UNMARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":" if (input.startsWith(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":" return ParserOutput.DELETE;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" if (input.startsWith(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":" return ParserOutput.LIST;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":" if (input.startsWith(\"echo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Eola-Z"},"content":" return ParserOutput.ECHO;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Eola-Z"},"content":" if (input.startsWith(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Eola-Z"},"content":" return ParserOutput.EXIT;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Eola-Z"},"content":" if (input.startsWith(\"find\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Eola-Z"},"content":" return ParserOutput.FIND;","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Eola-Z"},"content":" return ParserOutput.APPEND;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Eola-Z"},"content":" * Determine the type of the task that is to be created","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Eola-Z"},"content":" * @param task the text typed by the user","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Eola-Z"},"content":" * @return An enum which indicates the type of the task to create","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Eola-Z"},"content":" public static TaskType parseTask(String task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Eola-Z"},"content":" if (task.startsWith(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Eola-Z"},"content":" return TaskType.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Eola-Z"},"content":" if (task.startsWith(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Eola-Z"},"content":" return TaskType.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Eola-Z"},"content":" if (task.startsWith(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Eola-Z"},"content":" return TaskType.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Eola-Z"},"content":" return TaskType.GENERIC;","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Eola-Z"},"content":" public static int parseDelete(String toDelete) throws NumberFormatException, IndexOutOfBoundsException {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Eola-Z"},"content":" return Integer.parseInt(toDelete.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Eola-Z"},"content":" public static int parseMark(String toMark) throws NumberFormatException, IndexOutOfBoundsException {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Eola-Z"},"content":" return Integer.parseInt(toMark.substring(5)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Eola-Z"},"content":" public static int parseUnmark(String toUnmark) throws NumberFormatException, IndexOutOfBoundsException {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Eola-Z"},"content":" return Integer.parseInt(toUnmark.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Eola-Z"},"content":" public static String parseFind(String find) throws StringIndexOutOfBoundsException {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Eola-Z"},"content":" return find.substring(5);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Eola-Z"},"content":" public static String parseToDo(String todo) throws StringIndexOutOfBoundsException{","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Eola-Z"},"content":" return todo.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Eola-Z"},"content":" public static String[] parseDeadline(String deadline) throws StringIndexOutOfBoundsException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Eola-Z"},"content":" String[] out \u003d new String[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Eola-Z"},"content":" deadline \u003d deadline.substring(9);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Eola-Z"},"content":" out[0] \u003d deadline.substring(0, deadline.indexOf(\" /by \"));","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Eola-Z"},"content":" out[1] \u003d deadline.substring(deadline.indexOf(\" /by \") + 5);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Eola-Z"},"content":" return out;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Eola-Z"},"content":" public static String[] parseEvent(String event) throws StringIndexOutOfBoundsException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Eola-Z"},"content":" String[] out \u003d new String[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Eola-Z"},"content":" event \u003d event.substring(6);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Eola-Z"},"content":" int startPoint \u003d event.indexOf(\" /from \");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Eola-Z"},"content":" int endPoint \u003d event.indexOf(\" /to \");","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Eola-Z"},"content":" out[0] \u003d event.substring(0, startPoint);","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Eola-Z"},"content":" out[1] \u003d event.substring(startPoint + 7, endPoint);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Eola-Z"},"content":" out[2] \u003d event.substring(endPoint + 5);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Eola-Z"},"content":" return out;","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Eola-Z":101}},{"path":"src/main/java/duke/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":" * Stores the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" * Saves/loads tasks from a data file on shutdown/startup.","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" * Handles data manipulation","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" private static ArrayList\u003cTask\u003e taskArray \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":" * Loads tasks from data file if it exists","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":" public Storage() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" // Get directory of data","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":" Path path \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":" // Make new directory if it doesn\u0027t exist","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":" Files.createDirectories(path);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":" System.out.println(\"Directory is created!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Eola-Z"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Eola-Z"},"content":" System.err.println(\"Failed to create directory!\" + e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Eola-Z"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Eola-Z"},"content":" FileReader fr \u003d new FileReader(\"./data/duke.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Eola-Z"},"content":" int c;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Eola-Z"},"content":" String savedTasks \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Eola-Z"},"content":" while ((c\u003dfr.read()) !\u003d -1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Eola-Z"},"content":" savedTasks +\u003d (char) c;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Eola-Z"},"content":" String[] taskList \u003d new String[100];","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Eola-Z"},"content":" for (String task : savedTasks.split(\";\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Eola-Z"},"content":" String[] taskDetails \u003d task.split(\"/\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Eola-Z"},"content":" Task savedTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Eola-Z"},"content":" switch(taskDetails[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Eola-Z"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Eola-Z"},"content":" savedTask \u003d new ToDo(taskDetails[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Eola-Z"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Eola-Z"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Eola-Z"},"content":" savedTask \u003d new Deadline(taskDetails[2], taskDetails[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Eola-Z"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Eola-Z"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Eola-Z"},"content":" savedTask \u003d new Event(taskDetails[2], taskDetails[3], taskDetails[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Eola-Z"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Eola-Z"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Eola-Z"},"content":" savedTask \u003d new Task(taskDetails[0]);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Eola-Z"},"content":" if (Integer.parseInt(taskDetails[1]) \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Eola-Z"},"content":" savedTask.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Eola-Z"},"content":" taskArray.add(savedTask);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Eola-Z"},"content":" } catch (IOException fe) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Eola-Z"},"content":" System.out.println(\"File not found, creating new text file...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Eola-Z"},"content":" * Append task to array","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Eola-Z"},"content":" * @param t The task to be added","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Eola-Z"},"content":" public void appendTask(Task t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Eola-Z"},"content":" taskArray.add(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Eola-Z"},"content":" * List all tasks and their status","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Eola-Z"},"content":" * @return A string containing information about the tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Eola-Z"},"content":" public String list() {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Eola-Z"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Eola-Z"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Eola-Z"},"content":" for (Task task : taskArray) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Eola-Z"},"content":" if (task \u003d\u003d null) break;","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Eola-Z"},"content":" out +\u003d count++ + \". \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Eola-Z"},"content":" return out;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Eola-Z"},"content":" * Return a list of tasks that contain a keyphrase","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Eola-Z"},"content":" * @param search The keyphrase to search against","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Eola-Z"},"content":" * @return A long string containing a list of tasks that have the keyphrase","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Eola-Z"},"content":" public String find(String search) {","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Eola-Z"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Eola-Z"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Eola-Z"},"content":" for (Task task : taskArray) {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Eola-Z"},"content":" if (task \u003d\u003d null)","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Eola-Z"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Eola-Z"},"content":" if (!task.description.contains(search))","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Eola-Z"},"content":" continue;","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Eola-Z"},"content":" out +\u003d count++ + \". \" + task.toString() + \"\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Eola-Z"},"content":" return out;","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Eola-Z"},"content":" * Gets the specified task","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Eola-Z"},"content":" * @param index array index of task","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Eola-Z"},"content":" * @return the specified task","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Eola-Z"},"content":" public Task get(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Eola-Z"},"content":" return taskArray.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Eola-Z"},"content":" * Delete the specified task","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Eola-Z"},"content":" * @param index array index of task","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Eola-Z"},"content":" public void delete(int index) throws NumberFormatException, IndexOutOfBoundsException {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Eola-Z"},"content":" taskArray.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Eola-Z"},"content":" * Write the contents of duke.Storage into file","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Eola-Z"},"content":" public void write() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Eola-Z"},"content":" FileWriter fw \u003d new FileWriter(\"./data/duke.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Eola-Z"},"content":" String out \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Eola-Z"},"content":" for (Task taskToSave : taskArray) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Eola-Z"},"content":" String taskType;","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Eola-Z"},"content":" String taskAppendices \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Eola-Z"},"content":" if (taskToSave instanceof ToDo) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Eola-Z"},"content":" taskType \u003d \"T/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Eola-Z"},"content":" taskAppendices \u003d \"/\" + taskToSave.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Eola-Z"},"content":" } else if (taskToSave instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Eola-Z"},"content":" taskType \u003d \"D/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Eola-Z"},"content":" taskAppendices \u003d \"/\" + taskToSave.description + \"/\" + ((Deadline) taskToSave).by;","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Eola-Z"},"content":" } else if (taskToSave instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Eola-Z"},"content":" taskType \u003d \"E/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Eola-Z"},"content":" taskAppendices \u003d \"/\" + taskToSave.description + \"/\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Eola-Z"},"content":" ((Event) taskToSave).from + \"/\" + ((Event) taskToSave).to;","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Eola-Z"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Eola-Z"},"content":" taskType \u003d taskToSave.description + \"/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Eola-Z"},"content":" out +\u003d taskType + (taskToSave.isDone ? 1 : 0) + taskAppendices + \";\";","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Eola-Z"},"content":" fw.write(out);","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"Eola-Z"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Eola-Z":164}},{"path":"src/main/java/duke/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":" * A class containing information about each task","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":" * They have a name, and a boolean to check","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":" * whether the task is done","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":"public class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":" protected String description;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" * Create task based on description","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" * @param description The description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":" * Returns a string depending on whether the task is done","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"Eola-Z"},"content":" * @return X if the task is done, a space if it isn\u0027t","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Eola-Z"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Eola-Z"},"content":" return isDone ? \"X\" : \" \";","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"Eola-Z"},"content":" * Mark the task as complete/incomplete respectively","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Eola-Z"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"Eola-Z"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"Eola-Z"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"Eola-Z"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Eola-Z"},"content":" * Get the description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Eola-Z"},"content":" * @return The description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Eola-Z"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"Eola-Z"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"Eola-Z"},"content":" return \"[\" + this.getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":50}},{"path":"src/main/java/duke/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":" * A duke.Task object with the \"T\" label","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"public class ToDo extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":" * Get the description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" * @return The description of the task","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":" public String toString(){","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":" return \"[T] \" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":21}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":" public void parserTest1() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" assertEquals(Parser.parseTask(\"event do not steal\"), Parser.TaskType.EVENT);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" public void parserTest2() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" assertEquals(Parser.parseToDo(\"todo why\"), \"why\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Eola-Z":18}},{"path":"src/test/java/duke/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"package duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":" public void toDoTest1() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":" ToDo test \u003d new ToDo(\"Read 1, 2, 3\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":" test.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":" assertEquals(test.isDone, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":" test.markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":" assertEquals(test.isDone, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Eola-Z":16}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Eola-Z"},"content":"event","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"Eola-Z"},"content":"event 123","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"Eola-Z"},"content":"event 123 /from tuesday","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Eola-Z"},"content":"event 123 /from tuesday /to saturday","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Eola-Z"},"content":"todo","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Eola-Z"},"content":"todo mark","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Eola-Z"},"content":"deadline","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Eola-Z"},"content":"deadline mark friday","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Eola-Z"},"content":"deadline mark /by friday","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Eola-Z"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Eola-Z"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Eola-Z"},"content":"mark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Eola-Z"},"content":"unmark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"Eola-Z"},"content":"unmark 2","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Eola-Z"},"content":"delete 3","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Eola-Z"},"content":"delete 3","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Eola-Z"},"content":"delete 2","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Eola-Z"},"content":"todo what why","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Eola-Z"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Eola-Z"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Eola-Z":24}},{"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":"Eola-Z"},"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":{"Eola-Z":1,"-":20}}] diff --git a/Eola-Z_ip_master/commits.json b/Eola-Z_ip_master/commits.json index 49b1cd8e..1bdfaa1d 100644 --- a/Eola-Z_ip_master/commits.json +++ b/Eola-Z_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Eola-Z":[{"date":"2023-08-25","commitResults":[{"hash":"69316f7eade964abb61796382883b7aa12bf4ca3","isMergeCommit":false,"messageTitle":"Personalized the chatbot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":6}}},{"hash":"cffcb10de0395a50fa0b409ac39e162bc61eaf87","isMergeCommit":false,"messageTitle":"Added the Echo functionality to the chatbot","messageBody":"","tags":["Level-1","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"914f8b49d7a9b1305793dd79aa05cc456f14ac7e","isMergeCommit":false,"messageTitle":"Added functionality to append and list tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":4}}},{"hash":"9c0142ec6adb191f475d5418584cd213fda57e9f","isMergeCommit":false,"messageTitle":"Add a new Task class, and add functionality to toggle tasks between \u0027done\u0027 and \u0027not done\u0027.","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":7}}},{"hash":"ebca638dd9f0d9f207f67de8fa9ef0993701f302","isMergeCommit":false,"messageTitle":"Create new subclasses of Task to support labels and deadlines; and add functionality to manage the various types of tasks","messageBody":"","tags":["Level-5","Level-4","A-Inheritance","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":8}}},{"hash":"dab91a8540a47700a72519c0d1e53a1da1aa80c6","isMergeCommit":false,"messageTitle":"Added some test files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0}}},{"hash":"b6113f78f173b731655e3d2af35936dfb74a2960","isMergeCommit":false,"messageTitle":"Replace the task array with an arraylist; add functionality to delete tasks","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":31,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d946d8131fb93876c7789d1cf8f7826784deda59","isMergeCommit":false,"messageTitle":"Add file writing and reading to save tasks added by user","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":1}}},{"hash":"1650dd30120131158f484bcee613eb5a94d7aa0a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"8c3170c2c3d5760d9eee6a7a4d7e49a6ffed22f9","isMergeCommit":false,"messageTitle":"Add parsing for dates and formatted display of dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"933bc835b359ff75bdae15b151b36337b3b26742","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"dbdc5df8511b9b75ee27e0c6a2d03aaf2e05fb24","isMergeCommit":false,"messageTitle":"Add date parsing at Event/Deadline initialization to catch exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Eola-Z":{"java":480,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":24}},"authorContributionVariance":{"Eola-Z":12162.994},"authorDisplayNameMap":{"Eola-Z":"CS2103T-T08-2 EDWI..ANYI"}} +{"authorDailyContributionsMap":{"Eola-Z":[{"date":"2023-08-25","commitResults":[{"hash":"69316f7eade964abb61796382883b7aa12bf4ca3","isMergeCommit":false,"messageTitle":"Personalized the chatbot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":6}}},{"hash":"cffcb10de0395a50fa0b409ac39e162bc61eaf87","isMergeCommit":false,"messageTitle":"Added the Echo functionality to the chatbot","messageBody":"","tags":["Level-1","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":1}}},{"hash":"914f8b49d7a9b1305793dd79aa05cc456f14ac7e","isMergeCommit":false,"messageTitle":"Added functionality to append and list tasks","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":39,"deletions":4}}},{"hash":"9c0142ec6adb191f475d5418584cd213fda57e9f","isMergeCommit":false,"messageTitle":"Add a new Task class, and add functionality to toggle tasks between \u0027done\u0027 and \u0027not done\u0027.","messageBody":"","tags":["Level-3","A-Classes"],"fileTypesAndContributionMap":{"java":{"insertions":109,"deletions":7}}},{"hash":"ebca638dd9f0d9f207f67de8fa9ef0993701f302","isMergeCommit":false,"messageTitle":"Create new subclasses of Task to support labels and deadlines; and add functionality to manage the various types of tasks","messageBody":"","tags":["Level-5","Level-4","A-Inheritance","A-Exceptions"],"fileTypesAndContributionMap":{"java":{"insertions":155,"deletions":8}}},{"hash":"dab91a8540a47700a72519c0d1e53a1da1aa80c6","isMergeCommit":false,"messageTitle":"Added some test files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":19,"deletions":0}}},{"hash":"b6113f78f173b731655e3d2af35936dfb74a2960","isMergeCommit":false,"messageTitle":"Replace the task array with an arraylist; add functionality to delete tasks","messageBody":"","tags":["Level-6","A-Collections"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"java":{"insertions":31,"deletions":4}}}]},{"date":"2023-08-31","commitResults":[{"hash":"d946d8131fb93876c7789d1cf8f7826784deda59","isMergeCommit":false,"messageTitle":"Add file writing and reading to save tasks added by user","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":81,"deletions":1}}},{"hash":"1650dd30120131158f484bcee613eb5a94d7aa0a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"8c3170c2c3d5760d9eee6a7a4d7e49a6ffed22f9","isMergeCommit":false,"messageTitle":"Add parsing for dates and formatted display of dates","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":2}}},{"hash":"933bc835b359ff75bdae15b151b36337b3b26742","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"dbdc5df8511b9b75ee27e0c6a2d03aaf2e05fb24","isMergeCommit":false,"messageTitle":"Add date parsing at Event/Deadline initialization to catch exceptions","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":2}}},{"hash":"db7cbfecf49ff5884bfdca76d235fe8e0bf40845","isMergeCommit":false,"messageTitle":"Add Storage class to read, write and delete task data","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":152,"deletions":80}}},{"hash":"3fb30c85c64c883989d6505196395fbd6852beb3","isMergeCommit":false,"messageTitle":"Add Parser to manage text input by the user","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":111,"deletions":47}}},{"hash":"d4d4b34844a96e11d2e8d7e3a9b206e511dc8deb","isMergeCommit":false,"messageTitle":"Remove redundant constants","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":3}}},{"hash":"dd973c839a03c542866624685e7775d23feb4f27","isMergeCommit":true,"messageTitle":"Merge branch \u0027Branch-More-OOP\u0027","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"a308c84f7918bf1ce283b58263011d400e1b9e99","isMergeCommit":false,"messageTitle":"Package all classes into one \u0027duke\u0027 package","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":11},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"aaf4814cb5203505939a30f365afa631a826953c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027 into branch-Gradle","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e970b31dc8fd6762b98387144c3c022f58a3892f","isMergeCommit":false,"messageTitle":"Set up Gradle to run Duke from it","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"db50253d23d92268ee1f5b1778176eb07443f8cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Gradle\u0027","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"d58abcc19a9373498cdf0198dd131a9aad1ae04a","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser and ToDo classes","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ce71b3f618da3c81e9c3e8c344148cddb0b5fb88","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-JUnit\u0027","messageBody":"","tags":["A-JavaDoc","A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"815d063ec26c8401598bb84f1f3b56b1bcb99ce1","isMergeCommit":false,"messageTitle":"Add JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"61402435299cc61c62824c2cbe12c16ea30525a0","isMergeCommit":false,"messageTitle":"Modify Storage.java to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":11}}},{"hash":"219224470f64150d2db5b97e9a7845d40ae8cd38","isMergeCommit":false,"messageTitle":"Add search feature to Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":46,"deletions":2}}},{"hash":"a77cc43184dc445da25c14bb624cd5b7d330522d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2744d0a190806273b5a0f30a373b0e44d2b17e30","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bc0391f83facfe4ee7802e4b866cfc2f5bc649db","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Eola-Z":{"java":718,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":24}},"authorContributionVariance":{"Eola-Z":22468.994},"authorDisplayNameMap":{"Eola-Z":"CS2103T-T08-2 EDWI..ANYI"}} diff --git a/JasonLCY-Temp_ip_master/authorship.json b/JasonLCY-Temp_ip_master/authorship.json index 32fc6f92..8c10c2a2 100644 --- a/JasonLCY-Temp_ip_master/authorship.json +++ b/JasonLCY-Temp_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/jeeves/exception/DeletedIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class DeletedIdException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public DeletedIdException(String errorMsg) {","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingByException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingByException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingByException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingDescriptionException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingDescriptionException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingFromException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingFromException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingFromException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingIdException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingToException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingToException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingToException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/NotIntegerIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class NotIntegerIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public NotIntegerIdException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/OutOfBoundIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class OutOfBoundIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public OutOfBoundIdException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/main/Jeeves.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.main;","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingIdException;","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.NotIntegerIdException;","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.OutOfBoundIdException;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingDescriptionException;","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingByException;","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingFromException;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingToException;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.DeletedIdException;","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Todo;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Event;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains the main method and primary logic for Jeeves.","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Jeeves {","lastModifiedDate":"2023-08-21"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final String RELATIVEPATH_DATA_DIRECTORY \u003d \"data\";","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final String RELATIVEPATH_DATA_FILE \u003d \"data/JeevesData.txt\";","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_TODO_OFFSET \u003d 5;","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_DEADLINE_OFFSET \u003d 9;","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_EVENT_OFFSET \u003d 6;","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_MARK_OFFSET \u003d 5;","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_UNMARK_OFFSET \u003d 7;","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_DELETE_OFFSET \u003d 7;","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDFIELD_TO_OFFSET \u003d 4;","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDFIELD_FROM_OFFSET \u003d 6;","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDFIELD_BY_OFFSET \u003d 4;","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" * The arraylist used to track tasks.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" * Due to how the taskCount variable is used as the id and","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" * array access position, index 0 will always be unused.","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" * taskList is effectively 1-indexed","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" * Main process.","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" * Greets the user and waits for user input.","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" * Then, responds appropriately.","lastModifiedDate":"2023-08-22"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param args Optional command line arguments.","lastModifiedDate":"2023-08-21"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-21"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Greetings, Master. Jeeves at your service\");","lastModifiedDate":"2023-08-21"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"How may I serve you today?\\n\");","lastModifiedDate":"2023-08-21"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-25"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" Path dirPath \u003d Paths.get(RELATIVEPATH_DATA_DIRECTORY);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the directory does not exist, create it for the user","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Files.notExists(dirPath)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" Files.createDirectories(dirPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" // Do nothing if an error is encountered since the directory existence is already checked","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" Path dataPath \u003d Paths.get(RELATIVEPATH_DATA_FILE);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the file does not exist, create it for the user","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Files.notExists(dataPath)) {","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" Files.createFile(dataPath);","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" // Initialization step for task list, adds an empty object so the arraylist is 1-indexed","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(null);","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" // Do nothing if an error is encountered since the file existence is already checked","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the file already exists, read the data from it and populate the task list.","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" // Initialization step for task list, adds an empty object so the arraylist is 1-indexed","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(null);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" BufferedReader br \u003d Files.newBufferedReader(dataPath);","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" String currLine;","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" while ((currLine \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" // Extract the information to populate the task list","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" String[] currData \u003d currLine.split(\"\\\\|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" String taskType \u003d currData[0];","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" boolean status \u003d Integer.parseInt(currData[1]) \u003d\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d currData[2];","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" switch (taskType) {","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"T\":","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Todo(desc, status));","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"D\":","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" LocalDate deadline \u003d LocalDate.parse(currData[3]);","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Deadline(desc, deadline, status));","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"E\":","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" String startTime \u003d currData[3];","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" String endTime \u003d currData[4];","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Event(desc, startTime, endTime, status));","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" br.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":117,"author":{"gitId":"JasonLCY-Temp"},"content":" // Waits for user input and process it accordingly","lastModifiedDate":"2023-08-21"},{"lineNumber":118,"author":{"gitId":"JasonLCY-Temp"},"content":" while (true) {","lastModifiedDate":"2023-08-21"},{"lineNumber":119,"author":{"gitId":"JasonLCY-Temp"},"content":" // Reads the user input","lastModifiedDate":"2023-08-21"},{"lineNumber":120,"author":{"gitId":"JasonLCY-Temp"},"content":" String currentCommand \u003d sc.nextLine();","lastModifiedDate":"2023-08-21"},{"lineNumber":121,"author":{"gitId":"JasonLCY-Temp"},"content":" // Performs a different action depending on the input received","lastModifiedDate":"2023-08-21"},{"lineNumber":122,"author":{"gitId":"JasonLCY-Temp"},"content":" // Unless a specific pre-defined command is received, the program will","lastModifiedDate":"2023-08-25"},{"lineNumber":123,"author":{"gitId":"JasonLCY-Temp"},"content":" // print a default error message.","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currentCommand.equals(\"list\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":125,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays a different message if no task is being tracked","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Task.getTaskCount() \u003d\u003d 0) {","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"I am not currently tracking anything for you Master\");","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":129,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"This is what I am tracking for you Master\");","lastModifiedDate":"2023-08-25"},{"lineNumber":130,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":131,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays the current list of tasks tracked and their status","lastModifiedDate":"2023-08-23"},{"lineNumber":133,"author":{"gitId":"JasonLCY-Temp"},"content":" for (int i \u003d 1; i \u003c\u003d Task.getTaskCount(); i++) {","lastModifiedDate":"2023-08-22"},{"lineNumber":134,"author":{"gitId":"JasonLCY-Temp"},"content":" if (taskList.get(i) !\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(taskList.get(i).toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":136,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":137,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":138,"author":{"gitId":"JasonLCY-Temp"},"content":" // Prints an empty line for output clarity","lastModifiedDate":"2023-08-23"},{"lineNumber":139,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.print(\"\\n\");","lastModifiedDate":"2023-08-23"},{"lineNumber":140,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.startsWith(\"mark \")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":141,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to mark","lastModifiedDate":"2023-08-23"},{"lineNumber":142,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d currentCommand.substring(FINDCOMMAND_MARK_OFFSET);","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the task ID is invalid or not found, throw an error","lastModifiedDate":"2023-08-25"},{"lineNumber":144,"author":{"gitId":"JasonLCY-Temp"},"content":" // Else, update the task\u0027s status and notifies the user","lastModifiedDate":"2023-08-25"},{"lineNumber":145,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":146,"author":{"gitId":"JasonLCY-Temp"},"content":" if (idString.isEmpty()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":147,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is empty","lastModifiedDate":"2023-08-25"},{"lineNumber":148,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingIdException(\"I cannot do that as you have not provided me with a Task ID\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":149,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (isNotNumber(idString)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is not an integer","lastModifiedDate":"2023-08-25"},{"lineNumber":151,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new NotIntegerIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-08-25"},{"lineNumber":152,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided is not an integer)\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":153,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (Integer.parseInt(idString) \u003e Task.getTaskCount()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":154,"author":{"gitId":"JasonLCY-Temp"},"content":" // id does not exist","lastModifiedDate":"2023-08-25"},{"lineNumber":155,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new OutOfBoundIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-08-25"},{"lineNumber":156,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided does not exist)\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":157,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":158,"author":{"gitId":"JasonLCY-Temp"},"content":" // Updates the task status","lastModifiedDate":"2023-08-25"},{"lineNumber":159,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(idString);","lastModifiedDate":"2023-08-25"},{"lineNumber":160,"author":{"gitId":"JasonLCY-Temp"},"content":" if (taskList.get(id) \u003d\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided belongs to a deleted task)\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.get(id).setStatus(true);","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have marked the following task as done:\");","lastModifiedDate":"2023-08-23"},{"lineNumber":167,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \" + taskList.get(id).toString() + \"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":168,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":169,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingIdException | NotIntegerIdException | OutOfBoundIdException | DeletedIdException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":170,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":172,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.startsWith(\"unmark \")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":173,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to unmark","lastModifiedDate":"2023-08-23"},{"lineNumber":174,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d currentCommand.substring(FINDCOMMAND_UNMARK_OFFSET);","lastModifiedDate":"2023-08-26"},{"lineNumber":175,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the task ID is invalid or not found, throw an error","lastModifiedDate":"2023-08-25"},{"lineNumber":176,"author":{"gitId":"JasonLCY-Temp"},"content":" // Else, update the task\u0027s status and notifies the user","lastModifiedDate":"2023-08-25"},{"lineNumber":177,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":178,"author":{"gitId":"JasonLCY-Temp"},"content":" if (idString.isEmpty()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":179,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is empty","lastModifiedDate":"2023-08-25"},{"lineNumber":180,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingIdException(\"I cannot do that as you have not provided me with a Task ID\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":181,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (isNotNumber(idString)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":182,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is not an integer","lastModifiedDate":"2023-08-25"},{"lineNumber":183,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new NotIntegerIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-08-25"},{"lineNumber":184,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided is not an integer)\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":185,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (Integer.parseInt(idString) \u003e Task.getTaskCount()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":186,"author":{"gitId":"JasonLCY-Temp"},"content":" // id does not exist","lastModifiedDate":"2023-08-25"},{"lineNumber":187,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new OutOfBoundIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-08-25"},{"lineNumber":188,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided does not exist)\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":189,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-25"},{"lineNumber":190,"author":{"gitId":"JasonLCY-Temp"},"content":" // Updates the task status","lastModifiedDate":"2023-08-25"},{"lineNumber":191,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(idString);","lastModifiedDate":"2023-08-25"},{"lineNumber":192,"author":{"gitId":"JasonLCY-Temp"},"content":" if (taskList.get(id) \u003d\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":193,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-08-26"},{"lineNumber":194,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-08-26"},{"lineNumber":195,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided belongs to a deleted task)\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":196,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":197,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.get(id).setStatus(false);","lastModifiedDate":"2023-08-26"},{"lineNumber":198,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have marked the following task as not done:\");","lastModifiedDate":"2023-08-23"},{"lineNumber":199,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \" + taskList.get(id).toString() + \"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":200,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":201,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingIdException | NotIntegerIdException | OutOfBoundIdException | DeletedIdException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":202,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":204,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.startsWith(\"todo \")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":205,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user provided a description","lastModifiedDate":"2023-08-25"},{"lineNumber":206,"author":{"gitId":"JasonLCY-Temp"},"content":" // If so, adds the \u0027To do\u0027 Task to the task list normally","lastModifiedDate":"2023-08-25"},{"lineNumber":207,"author":{"gitId":"JasonLCY-Temp"},"content":" // Else throws the custom MissingDescriptionException error","lastModifiedDate":"2023-08-25"},{"lineNumber":208,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":209,"author":{"gitId":"JasonLCY-Temp"},"content":" String currTask \u003d currentCommand.substring(FINDCOMMAND_TODO_OFFSET);","lastModifiedDate":"2023-08-25"},{"lineNumber":210,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask.isEmpty()) {","lastModifiedDate":"2023-08-25"},{"lineNumber":211,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a todo cannot be empty\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":212,"author":{"gitId":"JasonLCY-Temp"},"content":" } ","lastModifiedDate":"2023-08-25"},{"lineNumber":213,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the Task normally to the task list if no errors are detected","lastModifiedDate":"2023-08-25"},{"lineNumber":214,"author":{"gitId":"JasonLCY-Temp"},"content":" Todo newTodo \u003d new Todo(currTask);","lastModifiedDate":"2023-08-25"},{"lineNumber":215,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(Task.getTaskCount(), newTodo);","lastModifiedDate":"2023-08-26"},{"lineNumber":216,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Task added:\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":217,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newTodo + \"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":218,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":219,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":220,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":221,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":222,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.startsWith(\"deadline \")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":223,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user provided a proper description and \"by\" date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":224,"author":{"gitId":"JasonLCY-Temp"},"content":" // If so, adds the \u0027deadline\u0027 Task to the task list normally","lastModifiedDate":"2023-08-25"},{"lineNumber":225,"author":{"gitId":"JasonLCY-Temp"},"content":" // Else throws the custom MissingDescriptionException error","lastModifiedDate":"2023-08-25"},{"lineNumber":226,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":227,"author":{"gitId":"JasonLCY-Temp"},"content":" int byDateIndex \u003d currentCommand.indexOf(\"/by \");","lastModifiedDate":"2023-08-25"},{"lineNumber":228,"author":{"gitId":"JasonLCY-Temp"},"content":" if (byDateIndex \u003d\u003d -1 || currentCommand.length() \u003d\u003d byDateIndex + FINDFIELD_BY_OFFSET) {","lastModifiedDate":"2023-08-25"},{"lineNumber":229,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/by \" block is missing, throws the MissingByException","lastModifiedDate":"2023-08-25"},{"lineNumber":230,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingByException(\"I cannot do that as the deadline has not been provided.\\n\" ","lastModifiedDate":"2023-08-25"},{"lineNumber":231,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /by \u003cYYYY-MM-DD\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-08-31"},{"lineNumber":232,"author":{"gitId":"JasonLCY-Temp"},"content":" } ","lastModifiedDate":"2023-08-25"},{"lineNumber":233,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((byDateIndex - 1) \u003c\u003d FINDCOMMAND_DEADLINE_OFFSET) {","lastModifiedDate":"2023-08-25"},{"lineNumber":234,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a deadline cannot be empty\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":235,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":236,"author":{"gitId":"JasonLCY-Temp"},"content":" String currTask \u003d currentCommand.substring(FINDCOMMAND_DEADLINE_OFFSET, byDateIndex - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":237,"author":{"gitId":"JasonLCY-Temp"},"content":" String byDate \u003d currentCommand.substring(byDateIndex + FINDFIELD_BY_OFFSET);","lastModifiedDate":"2023-08-25"},{"lineNumber":238,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the Date input is in the accepted format","lastModifiedDate":"2023-08-31"},{"lineNumber":239,"author":{"gitId":"JasonLCY-Temp"},"content":" LocalDate deadline \u003d LocalDate.parse(byDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":240,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":241,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the \u0027Deadline\u0027 Task to the task list","lastModifiedDate":"2023-08-25"},{"lineNumber":242,"author":{"gitId":"JasonLCY-Temp"},"content":" Deadline newDeadline \u003d new Deadline(currTask, deadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":243,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(Task.getTaskCount(), newDeadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":244,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Deadline added:\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":245,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newDeadline + \"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":246,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":247,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException | MissingByException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":248,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":249,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":250,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.startsWith(\"event \")) {","lastModifiedDate":"2023-08-25"},{"lineNumber":251,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user provided a description","lastModifiedDate":"2023-08-25"},{"lineNumber":252,"author":{"gitId":"JasonLCY-Temp"},"content":" // If so, adds the \u0027dead\u0027 Task to the task list normally","lastModifiedDate":"2023-08-25"},{"lineNumber":253,"author":{"gitId":"JasonLCY-Temp"},"content":" // Else throws the custom MissingDescriptionException error","lastModifiedDate":"2023-08-25"},{"lineNumber":254,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":255,"author":{"gitId":"JasonLCY-Temp"},"content":" int fromDateIndex \u003d currentCommand.indexOf(\"/from \");","lastModifiedDate":"2023-08-25"},{"lineNumber":256,"author":{"gitId":"JasonLCY-Temp"},"content":" if (fromDateIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":257,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/from \" block is missing, throws the MissingFromException","lastModifiedDate":"2023-08-25"},{"lineNumber":258,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingFromException(\"I cannot do that as the start time has not been provided.\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":259,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /from \u003cTime/Date\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":260,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":261,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":262,"author":{"gitId":"JasonLCY-Temp"},"content":" int toDateIndex \u003d currentCommand.indexOf(\"/to \");","lastModifiedDate":"2023-08-25"},{"lineNumber":263,"author":{"gitId":"JasonLCY-Temp"},"content":" if (toDateIndex \u003d\u003d -1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":264,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/to \" block is missing, throws the MissingByException","lastModifiedDate":"2023-08-25"},{"lineNumber":265,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingToException(\"I cannot do that as the end time has not been provided.\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":266,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /to \u003cTime/Date\u003e\u0027 after the task end date (after /from block)\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":267,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":268,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":269,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((fromDateIndex - 1) \u003c\u003d FINDCOMMAND_DEADLINE_OFFSET) {","lastModifiedDate":"2023-08-25"},{"lineNumber":270,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a event cannot be empty\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":271,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":272,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-25"},{"lineNumber":273,"author":{"gitId":"JasonLCY-Temp"},"content":" String currTask \u003d currentCommand.substring(FINDCOMMAND_EVENT_OFFSET, fromDateIndex - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":274,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":275,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((toDateIndex - 1) \u003c\u003d (fromDateIndex + FINDFIELD_FROM_OFFSET)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":276,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the /from block is present but no data has been given to the field, throw ","lastModifiedDate":"2023-08-25"},{"lineNumber":277,"author":{"gitId":"JasonLCY-Temp"},"content":" // the MissingFromException","lastModifiedDate":"2023-08-25"},{"lineNumber":278,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingFromException(\"I cannot do that as the start time has not been provided.\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":279,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /from \u003cTime/Date\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":280,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":281,"author":{"gitId":"JasonLCY-Temp"},"content":" String fromDate \u003d currentCommand.substring(fromDateIndex + FINDFIELD_FROM_OFFSET, toDateIndex - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":282,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":283,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currentCommand.length() \u003d\u003d (toDateIndex + FINDFIELD_TO_OFFSET)) {","lastModifiedDate":"2023-08-25"},{"lineNumber":284,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the /to block is present but no data has been given to the field, throw ","lastModifiedDate":"2023-08-25"},{"lineNumber":285,"author":{"gitId":"JasonLCY-Temp"},"content":" // the MissingToException","lastModifiedDate":"2023-08-25"},{"lineNumber":286,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingToException(\"I cannot do that as the end time has not been provided.\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":287,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /to \u003cTime/Date\u003e\u0027 after the task end date (after /from block)\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":288,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":289,"author":{"gitId":"JasonLCY-Temp"},"content":" String toDate \u003d currentCommand.substring(toDateIndex + FINDFIELD_TO_OFFSET);","lastModifiedDate":"2023-08-25"},{"lineNumber":290,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":291,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the \u0027Event\u0027 Task to the task list","lastModifiedDate":"2023-08-25"},{"lineNumber":292,"author":{"gitId":"JasonLCY-Temp"},"content":" Event newEvent \u003d new Event(currTask, fromDate, toDate);","lastModifiedDate":"2023-08-25"},{"lineNumber":293,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(Task.getTaskCount(), newEvent);","lastModifiedDate":"2023-08-26"},{"lineNumber":294,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Event added:\\n\" +","lastModifiedDate":"2023-08-25"},{"lineNumber":295,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newEvent + \"\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":296,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException | MissingFromException | MissingToException e) {","lastModifiedDate":"2023-08-25"},{"lineNumber":297,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":298,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":299,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.startsWith(\"delete \")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":300,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to delete","lastModifiedDate":"2023-08-26"},{"lineNumber":301,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d currentCommand.substring(FINDCOMMAND_DELETE_OFFSET);","lastModifiedDate":"2023-08-26"},{"lineNumber":302,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the task ID is invalid or not found, throw an error","lastModifiedDate":"2023-08-26"},{"lineNumber":303,"author":{"gitId":"JasonLCY-Temp"},"content":" // Else, update the task\u0027s status and notifies the user","lastModifiedDate":"2023-08-26"},{"lineNumber":304,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":305,"author":{"gitId":"JasonLCY-Temp"},"content":" if (idString.isEmpty()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":306,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is empty","lastModifiedDate":"2023-08-26"},{"lineNumber":307,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingIdException(\"I cannot do that as you have not provided me with a Task ID\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":308,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (isNotNumber(idString)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":309,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is not an integer","lastModifiedDate":"2023-08-26"},{"lineNumber":310,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new NotIntegerIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-08-26"},{"lineNumber":311,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided is not an integer)\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":312,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (Integer.parseInt(idString) \u003e Task.getTaskCount()) {","lastModifiedDate":"2023-08-26"},{"lineNumber":313,"author":{"gitId":"JasonLCY-Temp"},"content":" // id does not exist","lastModifiedDate":"2023-08-26"},{"lineNumber":314,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new OutOfBoundIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-08-26"},{"lineNumber":315,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided does not exist)\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":316,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-26"},{"lineNumber":317,"author":{"gitId":"JasonLCY-Temp"},"content":" // Updates the task status","lastModifiedDate":"2023-08-26"},{"lineNumber":318,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(idString);","lastModifiedDate":"2023-08-26"},{"lineNumber":319,"author":{"gitId":"JasonLCY-Temp"},"content":" if (taskList.get(id) \u003d\u003d null) {","lastModifiedDate":"2023-08-26"},{"lineNumber":320,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-08-26"},{"lineNumber":321,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-08-26"},{"lineNumber":322,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided belongs to a deleted task)\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":323,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":324,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have deleted the following task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":325,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \" + taskList.get(id).toString() + \"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":326,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.set(id, null);","lastModifiedDate":"2023-08-26"},{"lineNumber":327,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":328,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingIdException | NotIntegerIdException | OutOfBoundIdException | DeletedIdException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":329,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":330,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":331,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":332,"author":{"gitId":"JasonLCY-Temp"},"content":" // Before the actual termination of the program, writes the current task list to the external file.","lastModifiedDate":"2023-08-30"},{"lineNumber":333,"author":{"gitId":"JasonLCY-Temp"},"content":" // Starts by creating the text to write to the output file","lastModifiedDate":"2023-08-30"},{"lineNumber":334,"author":{"gitId":"JasonLCY-Temp"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-08-30"},{"lineNumber":335,"author":{"gitId":"JasonLCY-Temp"},"content":" for (Task currTask : taskList) {","lastModifiedDate":"2023-08-30"},{"lineNumber":336,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the task is already deleted from the list, (represented as null object)","lastModifiedDate":"2023-08-30"},{"lineNumber":337,"author":{"gitId":"JasonLCY-Temp"},"content":" // don\u0027t write it to the file","lastModifiedDate":"2023-08-30"},{"lineNumber":338,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask !\u003d null) {","lastModifiedDate":"2023-08-30"},{"lineNumber":339,"author":{"gitId":"JasonLCY-Temp"},"content":" // Determines what type of Task is being handled currently for printing purposes","lastModifiedDate":"2023-08-30"},{"lineNumber":340,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask instanceof Todo) {","lastModifiedDate":"2023-08-30"},{"lineNumber":341,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"T|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":342,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":343,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"D|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":344,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":345,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"E|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":346,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":347,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":348,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":349,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask.isDone()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":350,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"1|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":351,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":352,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"0|\");","lastModifiedDate":"2023-08-30"},{"lineNumber":353,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":354,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":355,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the description and other tracked data.","lastModifiedDate":"2023-08-30"},{"lineNumber":356,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask instanceof Todo) {","lastModifiedDate":"2023-08-30"},{"lineNumber":357,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-08-30"},{"lineNumber":358,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":359,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":360,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-08-30"},{"lineNumber":361,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-08-30"},{"lineNumber":362,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Deadline) currTask).getDeadline())","lastModifiedDate":"2023-08-30"},{"lineNumber":363,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":364,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":365,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-08-30"},{"lineNumber":366,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-08-30"},{"lineNumber":367,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Event) currTask).getStartTime())","lastModifiedDate":"2023-08-30"},{"lineNumber":368,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-08-30"},{"lineNumber":369,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Event) currTask).getEndTime())","lastModifiedDate":"2023-08-30"},{"lineNumber":370,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":371,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":372,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":373,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":374,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the text to the output file","lastModifiedDate":"2023-08-30"},{"lineNumber":375,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":376,"author":{"gitId":"JasonLCY-Temp"},"content":" BufferedWriter bw \u003d Files.newBufferedWriter(dataPath);","lastModifiedDate":"2023-08-30"},{"lineNumber":377,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.write(sb.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":378,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":379,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":380,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch(IOException e){","lastModifiedDate":"2023-08-30"},{"lineNumber":381,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":382,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":383,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays the farewell message and terminates the application","lastModifiedDate":"2023-08-21"},{"lineNumber":384,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"I bid you farewell, Master\");","lastModifiedDate":"2023-08-21"},{"lineNumber":385,"author":{"gitId":"JasonLCY-Temp"},"content":" System.exit(0);","lastModifiedDate":"2023-08-21"},{"lineNumber":386,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":387,"author":{"gitId":"JasonLCY-Temp"},"content":" // By default, informs the user that the command is not recognized.","lastModifiedDate":"2023-08-25"},{"lineNumber":388,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Apologies Master, I am unable to understand that command.\\n\"","lastModifiedDate":"2023-08-25"},{"lineNumber":389,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"I will improve myself to better serve you in the future.\\n\");","lastModifiedDate":"2023-08-25"},{"lineNumber":390,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":391,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":392,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":393,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":394,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-25"},{"lineNumber":395,"author":{"gitId":"JasonLCY-Temp"},"content":" * Checks if a string is only made up of integer numbers.","lastModifiedDate":"2023-08-25"},{"lineNumber":396,"author":{"gitId":"JasonLCY-Temp"},"content":" * Uses regex to determine if a string contains only integers","lastModifiedDate":"2023-08-25"},{"lineNumber":397,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-25"},{"lineNumber":398,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param input The string to be checked","lastModifiedDate":"2023-08-25"},{"lineNumber":399,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Whether the string is fully comprised of integers","lastModifiedDate":"2023-08-25"},{"lineNumber":400,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":401,"author":{"gitId":"JasonLCY-Temp"},"content":" private static boolean isNotNumber(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":402,"author":{"gitId":"JasonLCY-Temp"},"content":" return !input.matches(\"[0-9]+\");","lastModifiedDate":"2023-08-26"},{"lineNumber":403,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":404,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":405,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"JasonLCY-Temp":405}},{"path":"src/main/java/jeeves/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final DateTimeFormatter dtf \u003d DateTimeFormatter.ofPattern(\"dd LLL yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" public Deadline(String desc, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" public Deadline(String desc, LocalDate by, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Deadline of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" public LocalDate getDeadline() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" return by;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [D]\" + super.toString() + \" (by: \" + by.format(dtf) + \")\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":35}},{"path":"src/main/java/jeeves/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" public Event(String desc, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public Event(String desc, String from, String to, boolean status) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Event start time","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Starting time of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getStartTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" return from;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Event end time","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Ending time of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getEndTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" return to;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":42}},{"path":"src/main/java/jeeves/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains logic related to the Task object.","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" /** Tracks the number of task objects to guarantee the assigned ID will be unique */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" private static int taskCount \u003d 0;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /** Unique identification number for the task */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" protected final int id;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" /** The description of the task */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" protected final String desc;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for the Task object.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" * Automatically assigns the instance\u0027s ID based on the global task count.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param desc Description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" // Increments the taskCount and uses the value as the unique ID for the current task","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" Task.taskCount +\u003d 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" id \u003d Task.taskCount;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task(String desc, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" // Increments the taskCount and uses the value as the unique ID for the current task","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" Task.taskCount +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" id \u003d Task.taskCount;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the global Task count.","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Number of Tasks initialized","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" public static int getTaskCount() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskCount;","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task description.","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getDesc() {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" return desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" * Setter method for the Task status","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param isDone Status of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" public void setStatus(boolean isDone) {","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" * Obtain a string representation of a Task object","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return String representation of Task","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if a task has its status marked as complete","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" // and displays the appropriate visual","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" if (isDone) {","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(\"[X] \" + this.getDesc());","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(\"[ ] \" + this.getDesc());","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"JasonLCY-Temp":91}},{"path":"src/main/java/jeeves/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" public Todo(String desc, boolean status) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [T]\" + super.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"abcd","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"todo something","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"deadline return stuff /by Monday","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"event project meeting /from Tue 2pm /to 4pm","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"mark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"unmark 3","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"mark ","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"mark xyz","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"mark 48","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"unmark ","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"unmark xyz","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"unmark 13","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"todo ","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":"deadline something","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":"deadline /by stuff","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"deadline /by ","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":"event something","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":"event something /from x","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":"event /from something /to something","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":"event something /from /to ","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"event something /from x /to ","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":"delete ","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"delete xyz","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":"delete 50","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":"delete 1","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":"delete 1","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":"mark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":"unmark 1","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":35}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\task\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\exception\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\main\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":"java -classpath ..\\bin jeeves.main.Jeeves \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"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"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":"REM pause so it\u0027s actually possible to read the results","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"pause","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":7,"-":19}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" mainClass.set(\"jeeves.Jeeves\")","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" archiveBaseName \u003d \"jeeves\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"JasonLCY-Temp":2,"-":40}},{"path":"src/main/java/jeeves/Jeeves.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.DeletedIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.parser.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.ui.Ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains the main method and primary logic for Jeeves.","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Jeeves {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final String RELATIVEPATH_DATA_DIRECTORY \u003d \"data\";","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final String RELATIVEPATH_DATA_FILE \u003d \"data/JeevesData.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final String DELETEDIDEXCEPTION_MESSAGE \u003d \"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided belongs to a deleted task)\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" private final TaskList tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Parser parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" public Jeeves() {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" storage \u003d new Storage(RELATIVEPATH_DATA_DIRECTORY, RELATIVEPATH_DATA_FILE);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks \u003d new TaskList(storage.readTasklistFromFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" * Main process.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param args Optional command line arguments.","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" new Jeeves().run();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" public void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" // Waits for user input and process it accordingly","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" while (true) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" // Reads the user input and parses the relevant tokens for use","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cString\u003e tokens \u003d parser.parseUserInput(sc.nextLine());","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" String currentCommand \u003d tokens.get(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" // Performs a different action depending on the input received","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" // Unless a specific pre-defined command is received, the program will","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" // print a default error message.","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currentCommand.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays a different message if no task is being tracked","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Task.getTaskCount() \u003d\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"I am not currently tracking anything for you Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"This is what I am tracking for you Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays the current list of tasks tracked and their status","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" for (int i \u003d 1; i \u003c\u003d Task.getTaskCount(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(i) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.printTask(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" // Prints an empty line for output clarity","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.print(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" // Get the id and try to process the marking","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(id) \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException(DELETEDIDEXCEPTION_MESSAGE);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.markTask(id);","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have marked the following task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.printTask(id);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (DeletedIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(id) \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException(DELETEDIDEXCEPTION_MESSAGE);","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.unmarkTask(id);","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have marked the following task as not done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \" + tasks.getTask(id).toString() + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (DeletedIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" int id \u003d Integer.parseInt(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" if (tasks.getTask(id) \u003d\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the id to be marked belongs to a deleted task (null), throws the DeletedIdException","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new DeletedIdException(DELETEDIDEXCEPTION_MESSAGE);","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Understood, I have deleted the following task:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\" \" + tasks.getTask(id).toString() + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.setTask(id, null);","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (DeletedIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the To.do normally to the task list","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"JasonLCY-Temp"},"content":" Todo newTodo \u003d new Todo(tokens.get(1));","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.addTaskAtIndex(Task.getTaskCount(), newTodo);","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Task added:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newTodo + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the Date input is in the accepted format","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"JasonLCY-Temp"},"content":" LocalDate deadline \u003d LocalDate.parse(tokens.get(2));","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the \u0027Deadline\u0027 Task to the task list","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonLCY-Temp"},"content":" Deadline newDeadline \u003d new Deadline(tokens.get(1), deadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.addTaskAtIndex(Task.getTaskCount(), newDeadline);","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Deadline added:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newDeadline + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the \u0027Event\u0027 Task to the task list","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"JasonLCY-Temp"},"content":" Event newEvent \u003d new Event(tokens.get(1), tokens.get(2), tokens.get(3));","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"JasonLCY-Temp"},"content":" tasks.addTaskAtIndex(Task.getTaskCount(), newEvent);","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Event added:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"JasonLCY-Temp"},"content":" \" \" + newEvent + \"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currentCommand.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"JasonLCY-Temp"},"content":" // Before the actual termination of the program, writes the current task list to the external file.","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"JasonLCY-Temp"},"content":" storage.writeTasklistToFile(tasks.getTaskListDataAsString());","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"JasonLCY-Temp"},"content":" // Displays the farewell message and terminates the application","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"JasonLCY-Temp"},"content":" ui.printFarewell();","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"JasonLCY-Temp"},"content":" System.exit(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"JasonLCY-Temp"},"content":" // By default, informs the user that the command is not recognized.","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"JasonLCY-Temp"},"content":" ui.printInvalidCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":153}},{"path":"src/main/java/jeeves/exception/DeletedIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class DeletedIdException extends Exception {","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public DeletedIdException(String errorMsg) {","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingByException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingByException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingByException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingDescriptionException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingDescriptionException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingFromException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingFromException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingFromException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingIdException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/MissingToException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class MissingToException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public MissingToException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/NotIntegerIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class NotIntegerIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public NotIntegerIdException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/exception/OutOfBoundIdException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.exception;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class OutOfBoundIdException extends Exception {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public OutOfBoundIdException(String errorMsg) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8}},{"path":"src/main/java/jeeves/parser/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingByException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingFromException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.MissingToException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.NotIntegerIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.exception.OutOfBoundIdException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_TODO_OFFSET \u003d 5;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_DEADLINE_OFFSET \u003d 9;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_EVENT_OFFSET \u003d 6;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_MARK_OFFSET \u003d 5;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_UNMARK_OFFSET \u003d 7;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDCOMMAND_DELETE_OFFSET \u003d 7;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDFIELD_TO_OFFSET \u003d 4;","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDFIELD_FROM_OFFSET \u003d 6;","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final int FINDFIELD_BY_OFFSET \u003d 4;","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" public Parser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" public ArrayList\u003cString\u003e parseUserInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cString\u003e args \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" // returns args \u003ccommand\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"mark \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"mark\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to mark","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d input.substring(FINDCOMMAND_MARK_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the task ID is invalid, program will throw an error if the id is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfValidId(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the valid id to the args array list and returns args \u003ccommand,id\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"unmark \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"unmark\");","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to unmark","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d input.substring(FINDCOMMAND_UNMARK_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the task ID is invalid, program will throw an error if the id is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfValidId(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the valid id to the args array list and returns args \u003ccommand,id\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"delete \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"delete\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" // Gets the task ID that the user wish to delete","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" String idString \u003d input.substring(FINDCOMMAND_DELETE_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the task ID is invalid, program will throw an error if the id is invalid","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfValidId(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" // Adds the valid id to the args array list and returns args \u003ccommand, id\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(idString);","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"todo \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"todo\");","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user provided a description","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" // If so, returns args \u003ccommand, desc\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" // Else throws the custom MissingDescriptionException error","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d input.substring(FINDCOMMAND_TODO_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" checkIfDescMissing(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"deadline \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"deadline\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user has entered the command properly","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" // and extracts the relevant information to parse","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" // then returns args \u003ccommand, desc, dyDate\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" int byDateIndex \u003d getByDateIndex(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d input.substring(FINDCOMMAND_DEADLINE_OFFSET, byDateIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" String byDate \u003d input.substring(byDateIndex + FINDFIELD_BY_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(byDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException | MissingByException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.startsWith(\"event \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(\"event\");","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the user has entered the command properly","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" // and extracts the relevant information to parse","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" // then returns args \u003ccommand, desc, fromDate, toDate\u003e","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" int fromDateIndex \u003d getFromDateIndex(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" int toDateIndex \u003d getToDateIndex(input, fromDateIndex);","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d input.substring(FINDCOMMAND_EVENT_OFFSET, fromDateIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" String fromDate \u003d input.substring(fromDateIndex + FINDFIELD_FROM_OFFSET, toDateIndex - 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":" String toDate \u003d input.substring(toDateIndex + FINDFIELD_TO_OFFSET);","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(desc);","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(fromDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(toDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException | MissingFromException | MissingToException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"JasonLCY-Temp"},"content":" args.add(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"JasonLCY-Temp"},"content":" return args;","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"JasonLCY-Temp"},"content":" * Checks if a string is only made up of integer numbers.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"JasonLCY-Temp"},"content":" * Uses regex to determine if a string contains only integers","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param input The string to be checked","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Whether the string is fully comprised of integers","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"JasonLCY-Temp"},"content":" private static boolean isNotNumber(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"JasonLCY-Temp"},"content":" return !input.matches(\"[0-9]+\");","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"JasonLCY-Temp"},"content":" private static void checkIfValidId(String idString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"JasonLCY-Temp"},"content":" if (idString.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is empty","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingIdException(\"I cannot do that as you have not provided me with a Task ID\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (isNotNumber(idString)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"JasonLCY-Temp"},"content":" // id field is not an integer","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new NotIntegerIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided is not an integer)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (Integer.parseInt(idString) \u003e Task.getTaskCount()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"JasonLCY-Temp"},"content":" // id does not exist","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new OutOfBoundIdException(\"I cannot do that as that is not a valid Task ID \"","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"(ID provided does not exist)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"JasonLCY-Temp"},"content":" } ","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingIdException | NotIntegerIdException | OutOfBoundIdException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"JasonLCY-Temp"},"content":" private static void checkIfDescMissing(String desc) {","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"JasonLCY-Temp"},"content":" if (desc.isEmpty()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a todo cannot be empty\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (MissingDescriptionException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"JasonLCY-Temp"},"content":" private static int getByDateIndex(String cmd) throws MissingByException, MissingDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"JasonLCY-Temp"},"content":" int byDateIndex \u003d cmd.indexOf(\"/by \");","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"JasonLCY-Temp"},"content":" if (byDateIndex \u003d\u003d -1 || cmd.length() \u003d\u003d byDateIndex + FINDFIELD_BY_OFFSET) {","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/by \" block is missing, throws the MissingByException","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingByException(\"I cannot do that as the deadline has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /by \u003cYYYY-MM-DD\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((byDateIndex - 1) \u003c\u003d FINDCOMMAND_DEADLINE_OFFSET) {","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a deadline cannot be empty\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":154,"author":{"gitId":"JasonLCY-Temp"},"content":" return byDateIndex;","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":157,"author":{"gitId":"JasonLCY-Temp"},"content":" private static int getFromDateIndex(String input) throws MissingFromException, MissingToException, MissingDescriptionException {","lastModifiedDate":"2023-09-03"},{"lineNumber":158,"author":{"gitId":"JasonLCY-Temp"},"content":" int fromDateIndex \u003d input.indexOf(\"/from \");","lastModifiedDate":"2023-09-03"},{"lineNumber":159,"author":{"gitId":"JasonLCY-Temp"},"content":" if (fromDateIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":160,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/from \" block is missing, throws the MissingFromException","lastModifiedDate":"2023-09-03"},{"lineNumber":161,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingFromException(\"I cannot do that as the start time has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":162,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /from \u003cTime/Date\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":163,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":164,"author":{"gitId":"JasonLCY-Temp"},"content":" return fromDateIndex;","lastModifiedDate":"2023-09-03"},{"lineNumber":165,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":166,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":167,"author":{"gitId":"JasonLCY-Temp"},"content":" private static int getToDateIndex(String input, int fromDateIndex) throws MissingToException,","lastModifiedDate":"2023-09-03"},{"lineNumber":168,"author":{"gitId":"JasonLCY-Temp"},"content":" MissingDescriptionException, MissingFromException {","lastModifiedDate":"2023-09-03"},{"lineNumber":169,"author":{"gitId":"JasonLCY-Temp"},"content":" int toDateIndex \u003d input.indexOf(\"/to \");","lastModifiedDate":"2023-09-03"},{"lineNumber":170,"author":{"gitId":"JasonLCY-Temp"},"content":" if (toDateIndex \u003d\u003d -1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":171,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the \"/to \" block is missing, throws the MissingByException","lastModifiedDate":"2023-09-03"},{"lineNumber":172,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingToException(\"I cannot do that as the end time has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":173,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /to \u003cTime/Date\u003e\u0027 after the task end date (after /from block)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":174,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"JasonLCY-Temp"},"content":" if (input.length() \u003d\u003d (toDateIndex + FINDFIELD_TO_OFFSET)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the /to block is present but no data has been given to the field, throw ","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"JasonLCY-Temp"},"content":" // the MissingToException","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingToException(\"I cannot do that as the end time has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /to \u003cTime/Date\u003e\u0027 after the task end date (after /from block)\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":180,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":181,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((fromDateIndex - 1) \u003c\u003d FINDCOMMAND_DEADLINE_OFFSET) {","lastModifiedDate":"2023-09-03"},{"lineNumber":182,"author":{"gitId":"JasonLCY-Temp"},"content":" //If the description is missing, throw the MissingDescription Exception","lastModifiedDate":"2023-09-03"},{"lineNumber":183,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingDescriptionException(\"The description of a event cannot be empty\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":184,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":185,"author":{"gitId":"JasonLCY-Temp"},"content":" if ((toDateIndex - 1) \u003c\u003d (fromDateIndex + FINDFIELD_FROM_OFFSET)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":186,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the /from block is present but no data has been given to the field, throw ","lastModifiedDate":"2023-09-03"},{"lineNumber":187,"author":{"gitId":"JasonLCY-Temp"},"content":" // the MissingFromException","lastModifiedDate":"2023-09-03"},{"lineNumber":188,"author":{"gitId":"JasonLCY-Temp"},"content":" throw new MissingFromException(\"I cannot do that as the start time has not been provided.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":189,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"Please add \u0027 /from \u003cTime/Date\u003e\u0027 after the task description\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":190,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":191,"author":{"gitId":"JasonLCY-Temp"},"content":" return toDateIndex;","lastModifiedDate":"2023-09-03"},{"lineNumber":192,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":193,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":193}},{"path":"src/main/java/jeeves/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"import jeeves.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Path dataDirPath;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" private final Path dataFilePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" public Storage(String dirPathString, String filePathString) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if the directory exists","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" dataDirPath \u003d Paths.get(dirPathString);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the directory does not exist, create it for the user","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Files.notExists(dataDirPath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" Files.createDirectories(dataDirPath);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" // Do nothing if an error is encountered since the directory existence is already checked","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" // Theoretically impossible to enter this block","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" dataFilePath \u003d Paths.get(filePathString);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the file does not exist, create it for the user","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" if (Files.notExists(dataFilePath)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" Files.createFile(dataFilePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" // Do nothing if an error is encountered since the file existence is already checked","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" // Theoretically impossible to enter this block","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" public void writeTasklistToFile(String data) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the text to the output file","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" BufferedWriter bw \u003d Files.newBufferedWriter(dataFilePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.write(data);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.flush();","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" bw.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch(IOException e){","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" public ArrayList\u003cTask\u003e readTasklistFromFile() {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" // Initialization step for task list, adds an empty object so the arraylist is 1-indexed","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" ArrayList\u003cTask\u003e taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(null);","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" BufferedReader br \u003d Files.newBufferedReader(dataFilePath);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" String currLine;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" while ((currLine \u003d br.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" // Extract the information to populate the array list","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" String[] currData \u003d currLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" String taskType \u003d currData[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" boolean status \u003d Integer.parseInt(currData[1]) \u003d\u003d 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" String desc \u003d currData[2];","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"T\":","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Todo(desc, status));","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"D\":","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" LocalDate deadline \u003d LocalDate.parse(currData[3]);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Deadline(desc, deadline, status));","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" case \"E\":","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" String startTime \u003d currData[3];","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" String endTime \u003d currData[4];","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(new Event(desc, startTime, endTime, status));","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" br.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":91}},{"path":"src/main/java/jeeves/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" private static final DateTimeFormatter dtf \u003d DateTimeFormatter.ofPattern(\"dd LLL yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" protected LocalDate by;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" public Deadline(String desc, LocalDate by) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" public Deadline(String desc, LocalDate by, boolean status) {","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task deadline","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Deadline of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" public LocalDate getDeadline() {","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" return by;","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [D]\" + super.toString() + \" (by: \" + by.format(dtf) + \")\");","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":35}},{"path":"src/main/java/jeeves/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" public Event(String desc, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public Event(String desc, String from, String to, boolean status) {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Event start time","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Starting time of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getStartTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" return from;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Event end time","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Ending time of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getEndTime() {","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" return to;","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\");","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":42}},{"path":"src/main/java/jeeves/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"/**","lastModifiedDate":"2023-08-21"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" * Contains logic related to the Task object.","lastModifiedDate":"2023-08-21"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Task {","lastModifiedDate":"2023-08-21"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" /** Tracks the number of task objects to guarantee the assigned ID will be unique */","lastModifiedDate":"2023-08-21"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" private static int taskCount \u003d 0;","lastModifiedDate":"2023-08-21"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" /** Unique identification number for the task */","lastModifiedDate":"2023-08-21"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" protected final int id;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" /** The description of the task */","lastModifiedDate":"2023-08-21"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" protected final String desc;","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" * Default constructor for the Task object.","lastModifiedDate":"2023-08-21"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" * Automatically assigns the instance\u0027s ID based on the global task count.","lastModifiedDate":"2023-08-21"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param desc Description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task(String desc) {","lastModifiedDate":"2023-08-21"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" // Increments the taskCount and uses the value as the unique ID for the current task","lastModifiedDate":"2023-08-21"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" Task.taskCount +\u003d 1;","lastModifiedDate":"2023-08-21"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" id \u003d Task.taskCount;","lastModifiedDate":"2023-08-21"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task(String desc, boolean isDone) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" // Increments the taskCount and uses the value as the unique ID for the current task","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" Task.taskCount +\u003d 1;","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" id \u003d Task.taskCount;","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the global Task count.","lastModifiedDate":"2023-08-22"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Number of Tasks initialized","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" public static int getTaskCount() {","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskCount;","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-21"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task description.","lastModifiedDate":"2023-08-21"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-21"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Description of the task","lastModifiedDate":"2023-08-21"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-21"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getDesc() {","lastModifiedDate":"2023-08-21"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" return desc;","lastModifiedDate":"2023-08-21"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-21"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-21"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" * Getter method for the Task status.","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return Status of the task","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" * Setter method for the Task status","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" * @param isDone Status of the task","lastModifiedDate":"2023-08-23"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" public void setStatus(boolean isDone) {","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" * {@inheritDoc}","lastModifiedDate":"2023-08-23"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" * Obtain a string representation of a Task object","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" *","lastModifiedDate":"2023-08-23"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" * @return String representation of Task","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" // Checks if a task has its status marked as complete","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" // and displays the appropriate visual","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" if (isDone) {","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(\"[X] \" + this.getDesc());","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(\"[ ] \" + this.getDesc());","lastModifiedDate":"2023-08-25"},{"lineNumber":88,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-21"}],"authorContributionMap":{"JasonLCY-Temp":91}},{"path":"src/main/java/jeeves/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" * The arraylist used to track tasks.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" * Due to how the taskCount variable is used as the id and","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" * array access position, index 0 will always be unused.","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" * taskList is effectively 1-indexed","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList \u003d tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" public void addTaskAtIndex(int index, Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.add(index, t);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"JasonLCY-Temp"},"content":" public void setTask(int index, Task t) {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.set(index,t);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"JasonLCY-Temp"},"content":" return taskList.get(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(taskList.get(index).toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"JasonLCY-Temp"},"content":" public void markTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.get(index).setStatus(true);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"JasonLCY-Temp"},"content":" public void unmarkTask(int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"JasonLCY-Temp"},"content":" taskList.get(index).setStatus(false);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"JasonLCY-Temp"},"content":" public String getTaskListDataAsString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"JasonLCY-Temp"},"content":" // Starts by creating the text to write to the output file","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"JasonLCY-Temp"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"JasonLCY-Temp"},"content":" for (Task currTask : taskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"JasonLCY-Temp"},"content":" // If the task is already deleted from the list, (represented as null object)","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"JasonLCY-Temp"},"content":" // don\u0027t write it to the file","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"JasonLCY-Temp"},"content":" // Determines what type of Task is being handled currently for printing purposes","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask instanceof Todo) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"T|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"D|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"E|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the status of the task","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask.isDone()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"1|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(\"0|\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"JasonLCY-Temp"},"content":" // Writes the description and other tracked data.","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"JasonLCY-Temp"},"content":" if (currTask instanceof Todo) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"JasonLCY-Temp"},"content":" } else if (currTask instanceof Deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Deadline) currTask).getDeadline())","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"JasonLCY-Temp"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"JasonLCY-Temp"},"content":" sb.append(currTask.getDesc())","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Event) currTask).getStartTime())","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"|\")","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(((Event) currTask).getEndTime())","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"JasonLCY-Temp"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"JasonLCY-Temp"},"content":" return sb.toString(); ","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":87}},{"path":"src/main/java/jeeves/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.task;","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public Todo(String desc) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" public Todo(String desc, boolean status) {","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" super(desc, status);","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" return String.format(this.id + \". [T]\" + super.toString());","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":17}},{"path":"src/main/java/jeeves/ui/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonLCY-Temp"},"content":"package jeeves.ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"JasonLCY-Temp"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"JasonLCY-Temp"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Greetings, Master. Jeeves at your service\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"How may I serve you today?\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printFarewell() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"I bid you farewell, Master\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"JasonLCY-Temp"},"content":" ","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"JasonLCY-Temp"},"content":" public void printInvalidCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"JasonLCY-Temp"},"content":" System.out.println(\"Apologies Master, I am unable to understand that command.\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"JasonLCY-Temp"},"content":" + \"I will improve myself to better serve you in the future.\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"JasonLCY-Temp"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"JasonLCY-Temp":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":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\storage\\*.java","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\task\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\exception\\*.java","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"JasonLCY-Temp"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\jeeves\\*.java","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"JasonLCY-Temp"},"content":"java -classpath ..\\bin jeeves.Jeeves \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"JasonLCY-Temp"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"JasonLCY-Temp"},"content":"REM pause so it\u0027s actually possible to read the results","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"JasonLCY-Temp"},"content":"pause","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"JasonLCY-Temp":8,"-":19}}] diff --git a/JasonLCY-Temp_ip_master/commits.json b/JasonLCY-Temp_ip_master/commits.json index 3ba49aea..f629363f 100644 --- a/JasonLCY-Temp_ip_master/commits.json +++ b/JasonLCY-Temp_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"JasonLCY-Temp":[{"date":"2023-08-21","commitResults":[{"hash":"1a1e32733ab6026b28671df1fafbc0480aaa600a","isMergeCommit":false,"messageTitle":"Remove Duke.java and Add Jeeves.java","messageBody":"Change the name and personality of the chatbot.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"9b0ab0a314cab2af37375cc60c4c71ddbe59c9fc","isMergeCommit":false,"messageTitle":"Jeeves class, main method: Update to be responsive to user input","messageBody":"The program only starts and ends instantly.\n\nThere is a need for it to be able to recognize user input and respond accordingly.\n\nLet\u0027s add the ability to read and recognize user input.\nSpecifically, Jeeves can recognize the \u0027bye\u0027 command and terminate appropriately.\nAll other commands will simply be echoed back.\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"2a981da0366d1899705896931f11e3e49dab1243","isMergeCommit":false,"messageTitle":"Add Task.java","messageBody":"No program logic exists for managing tasks.\n\nA Task Object will allow for the management of tasks cleanly.\n\nLet\u0027s add the Task class with a default constructor and getter/setters.\n","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6fb6025ae9cc7d4afb38714919aa2706cba918a7","isMergeCommit":false,"messageTitle":"Update Task class: Getter methods for task count and task id","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"c2d559ffb5a2689714ef00c50daf77196772fceb","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add task and list task feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}}]},{"date":"2023-08-23","commitResults":[{"hash":"f3a908c49641c3daf2c182d86c3da579f723e91b","isMergeCommit":false,"messageTitle":"Update Task class: Add status tracking attribute and methods","messageBody":"Task object attribute list needs to expanded in order to extend the\nscope of Jeeves\u0027s functionality to track task status.\n","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"e2479d54c165bce16803ef3b053842a11c1ef620","isMergeCommit":false,"messageTitle":"Update Task class: Remove unused setter method for task description","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":10}}},{"hash":"fcf9b5e6786ec4fba445ea84d4c91da4c4dd2f30","isMergeCommit":false,"messageTitle":"Update Jeeves class: Change taskList scope","messageBody":"To avoid unnecessary code duplication when implementing task marking\nand unmarking, the task printing function has been moved to a separate\nmethod.\n\nThe scope of taskList has also been changed to be a class-level member\nin order for the program to properly function.\n","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":8}}},{"hash":"f84e76dbf837bdb5f4e90f057272312e3e8e9078","isMergeCommit":false,"messageTitle":"Task class: Replace switch case with if else blocks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":7}}},{"hash":"440c507fc1987ef5e03ee3dd0eb7878c34465c1e","isMergeCommit":false,"messageTitle":"Jeeves class: Add Marking/Unmarking function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"30d761b913028544f133743c1e283963863a1835","isMergeCommit":false,"messageTitle":"Update program to use the toString() String representation of a Task object for displaying output.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":20}}},{"hash":"480e6f0b28f547b85451cd41e94aa1bdfc4359f1","isMergeCommit":false,"messageTitle":"Refactor project: Packaged files, removed unused methods","messageBody":"In preparation of adding subclasses to Task, the current java files have\nbeen packaged for better logical organization.\n\nAlso, unused methods have been removed for better code cleanliness.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":18}}}]},{"date":"2023-08-25","commitResults":[{"hash":"51d901f5e323db894efcd403b80ec78c9bb7a200","isMergeCommit":false,"messageTitle":"Add Todo, Event and Deadline classes skeleton","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"60be09cfd4f6574b9b86303521497fbaf8e41c9a","isMergeCommit":false,"messageTitle":"Update String representation of Task objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"a3d51ea5de7da764f970bc5a895584e1bff35c53","isMergeCommit":false,"messageTitle":"Update Deadline and Event classes to be functional","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":2}}},{"hash":"6bfa3fc395bba16b07c1ba1a22041da68a066968","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add support for Todo, Deadline and Event tracking","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":11}}},{"hash":"0c30f6ec900446e1d6dc30c79dd1e452b4eae196","isMergeCommit":false,"messageTitle":"Update testcase scripts to work with Jeeves","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"8519ca853b431f67e7180a6fc5cf4b5bfabe81eb","isMergeCommit":false,"messageTitle":"Remove runtime.sh","messageBody":"Shell script is unused as local devices are all Windows.\nPlease utilize the batch file for testing.\n","fileTypesAndContributionMap":{"sh":{"insertions":0,"deletions":38}}},{"hash":"c56d5de3c12c7c2045da357093a1e8d442c18e88","isMergeCommit":false,"messageTitle":"Update testing batch file to work with this project","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":6,"deletions":2}}},{"hash":"529d0e924cfa39a17225faadb34b5d425cffe510","isMergeCommit":false,"messageTitle":"Update Jeeves class: Move scanner scope","messageBody":"Scanner was being recreated after every command, this is a waste of\nresources.\n\nScanner is only created once now.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b5f19bc9bb6bb17231963d53e0cb8ba38770507","isMergeCommit":false,"messageTitle":"Add test cases and expected output files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"61ee1834cfd2c5f6b67c63550783ba4f0abc27dd","isMergeCommit":false,"messageTitle":"Update Jeeves class: New message output when 0 tasks recorded","messageBody":"Also updated test cases and expected output files to match the new\nintended behaviour\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":7,"deletions":1}}},{"hash":"e6db0be0ba5075c65d5da33823573cd5ecc6ba74","isMergeCommit":false,"messageTitle":"Jeeves class: Add constants and remove magic numbers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":9}}},{"hash":"9b26f6a9561ed2fea90bf56458f1e99b6ec54c79","isMergeCommit":false,"messageTitle":"Update Jeeves Class: Add exception handling for \"mark\" command","messageBody":"Also updated test cases and expected outputs with new expected\nbehaviour\n","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":63,"deletions":7},"bat":{"insertions":1,"deletions":0}}},{"hash":"4c379235ba2ed4d7bda8d89c0e903ebff87ef6c4","isMergeCommit":false,"messageTitle":"Update Jeeves Class: Add exception handling for \"unmark\" command","messageBody":"Also updated test cases and expected outputs with new expected\nbehaviour\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":28,"deletions":7}}},{"hash":"c2b6f2d11831e8b9dfcf6b5fdc5dfde73f6422f5","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add exception handling for multiple commands","messageBody":"Specifically\n* todo\n* deadline\n* event\n\nAlso updated test cases and expected output with the expected behaviour\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":121,"deletions":30}}}]},{"date":"2023-08-26","commitResults":[{"hash":"eb41263481b71f3e703def0111ab6a187cfaace2","isMergeCommit":false,"messageTitle":"Update Jeeves class: Change taskList data structure to ArrayList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"918e0a8fb66e1bca14185013f055214e713393d1","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add Delete function","messageBody":"* Tasks can now be permanently removed from the task list.\n* Exception handling added for deleted tasks to \"mark\" and \"unmark\"\ncommands\n* Test cases and expected output updated to match new expected behaviour\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":61,"deletions":7}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ac8ab0fa500cb1a723e614ede2cf340f4c294bd0","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add datafile creation ability","messageBody":"Jeeves will automatically check for a saved task list and\ncreate the file and directory path required.\n\nAlso \u0027.gitignore\u0027 update to ignore the Task data as it does not make\nsense to track it with a RCS.\n","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"300596f5df00ad1c3fd9ca5467b2c31b1439c4c0","isMergeCommit":false,"messageTitle":"Update Jeeves to store tasks to an external data file","messageBody":"Updated the Task classes to be able to extract the required information\nto be written to the file.\nAlso updated test cases with new expected behaviour following a previous\nchange.\n","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":9}}},{"hash":"004baba6d81eb444d3cc9ac057c430fb0716c895","isMergeCommit":false,"messageTitle":"Update Jeeves to read data from external data file","messageBody":"Task classes edited with new constructors to handle the new required\nscenario.\n","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":13}}},{"hash":"9f78cfcec3f84d54486ccb0ca6ea31389d2adb92","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"c4f83cbdf8e04df15ba010c03870d4d4bcd9075e","isMergeCommit":false,"messageTitle":"Update Jeeves to understand Dates","messageBody":"Deadline tasks can now officially support Dates in yyyy-MM-dd format\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":9}}},{"hash":"f10db9081cb5954f11bb77a16606d3fe48b2a68e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"JasonLCY-Temp":{"java":654,"md":0,"fxml":0,"sh":0,"bat":7,"gradle":0,"txt":35}},"authorContributionVariance":{"JasonLCY-Temp":17217.1},"authorDisplayNameMap":{"JasonLCY-Temp":"CS2103T-T11-2 JASO.. YEN"}} +{"authorDailyContributionsMap":{"JasonLCY-Temp":[{"date":"2023-08-21","commitResults":[{"hash":"1a1e32733ab6026b28671df1fafbc0480aaa600a","isMergeCommit":false,"messageTitle":"Remove Duke.java and Add Jeeves.java","messageBody":"Change the name and personality of the chatbot.\n","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":10}}},{"hash":"9b0ab0a314cab2af37375cc60c4c71ddbe59c9fc","isMergeCommit":false,"messageTitle":"Jeeves class, main method: Update to be responsive to user input","messageBody":"The program only starts and ends instantly.\n\nThere is a need for it to be able to recognize user input and respond accordingly.\n\nLet\u0027s add the ability to read and recognize user input.\nSpecifically, Jeeves can recognize the \u0027bye\u0027 command and terminate appropriately.\nAll other commands will simply be echoed back.\n","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":2}}},{"hash":"2a981da0366d1899705896931f11e3e49dab1243","isMergeCommit":false,"messageTitle":"Add Task.java","messageBody":"No program logic exists for managing tasks.\n\nA Task Object will allow for the management of tasks cleanly.\n\nLet\u0027s add the Task class with a default constructor and getter/setters.\n","fileTypesAndContributionMap":{"java":{"insertions":42,"deletions":0}}}]},{"date":"2023-08-22","commitResults":[{"hash":"6fb6025ae9cc7d4afb38714919aa2706cba918a7","isMergeCommit":false,"messageTitle":"Update Task class: Getter methods for task count and task id","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":0}}},{"hash":"c2d559ffb5a2689714ef00c50daf77196772fceb","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add task and list task feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":23,"deletions":5}}}]},{"date":"2023-08-23","commitResults":[{"hash":"f3a908c49641c3daf2c182d86c3da579f723e91b","isMergeCommit":false,"messageTitle":"Update Task class: Add status tracking attribute and methods","messageBody":"Task object attribute list needs to expanded in order to extend the\nscope of Jeeves\u0027s functionality to track task status.\n","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":0}}},{"hash":"e2479d54c165bce16803ef3b053842a11c1ef620","isMergeCommit":false,"messageTitle":"Update Task class: Remove unused setter method for task description","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":10}}},{"hash":"fcf9b5e6786ec4fba445ea84d4c91da4c4dd2f30","isMergeCommit":false,"messageTitle":"Update Jeeves class: Change taskList scope","messageBody":"To avoid unnecessary code duplication when implementing task marking\nand unmarking, the task printing function has been moved to a separate\nmethod.\n\nThe scope of taskList has also been changed to be a class-level member\nin order for the program to properly function.\n","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":8}}},{"hash":"f84e76dbf837bdb5f4e90f057272312e3e8e9078","isMergeCommit":false,"messageTitle":"Task class: Replace switch case with if else blocks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":7}}},{"hash":"440c507fc1987ef5e03ee3dd0eb7878c34465c1e","isMergeCommit":false,"messageTitle":"Jeeves class: Add Marking/Unmarking function","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":0}}},{"hash":"30d761b913028544f133743c1e283963863a1835","isMergeCommit":false,"messageTitle":"Update program to use the toString() String representation of a Task object for displaying output.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":20}}},{"hash":"480e6f0b28f547b85451cd41e94aa1bdfc4359f1","isMergeCommit":false,"messageTitle":"Refactor project: Packaged files, removed unused methods","messageBody":"In preparation of adding subclasses to Task, the current java files have\nbeen packaged for better logical organization.\n\nAlso, unused methods have been removed for better code cleanliness.\n","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":18}}}]},{"date":"2023-08-25","commitResults":[{"hash":"51d901f5e323db894efcd403b80ec78c9bb7a200","isMergeCommit":false,"messageTitle":"Add Todo, Event and Deadline classes skeleton","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":0}}},{"hash":"60be09cfd4f6574b9b86303521497fbaf8e41c9a","isMergeCommit":false,"messageTitle":"Update String representation of Task objects","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":6,"deletions":10}}},{"hash":"a3d51ea5de7da764f970bc5a895584e1bff35c53","isMergeCommit":false,"messageTitle":"Update Deadline and Event classes to be functional","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":2}}},{"hash":"6bfa3fc395bba16b07c1ba1a22041da68a066968","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add support for Todo, Deadline and Event tracking","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":11}}},{"hash":"0c30f6ec900446e1d6dc30c79dd1e452b4eae196","isMergeCommit":false,"messageTitle":"Update testcase scripts to work with Jeeves","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":1,"deletions":1},"sh":{"insertions":1,"deletions":1}}},{"hash":"8519ca853b431f67e7180a6fc5cf4b5bfabe81eb","isMergeCommit":false,"messageTitle":"Remove runtime.sh","messageBody":"Shell script is unused as local devices are all Windows.\nPlease utilize the batch file for testing.\n","fileTypesAndContributionMap":{"sh":{"insertions":0,"deletions":38}}},{"hash":"c56d5de3c12c7c2045da357093a1e8d442c18e88","isMergeCommit":false,"messageTitle":"Update testing batch file to work with this project","messageBody":"","fileTypesAndContributionMap":{"bat":{"insertions":6,"deletions":2}}},{"hash":"529d0e924cfa39a17225faadb34b5d425cffe510","isMergeCommit":false,"messageTitle":"Update Jeeves class: Move scanner scope","messageBody":"Scanner was being recreated after every command, this is a waste of\nresources.\n\nScanner is only created once now.\n","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"1b5f19bc9bb6bb17231963d53e0cb8ba38770507","isMergeCommit":false,"messageTitle":"Add test cases and expected output files","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"61ee1834cfd2c5f6b67c63550783ba4f0abc27dd","isMergeCommit":false,"messageTitle":"Update Jeeves class: New message output when 0 tasks recorded","messageBody":"Also updated test cases and expected output files to match the new\nintended behaviour\n","fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":7,"deletions":1}}},{"hash":"e6db0be0ba5075c65d5da33823573cd5ecc6ba74","isMergeCommit":false,"messageTitle":"Jeeves class: Add constants and remove magic numbers","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":9}}},{"hash":"9b26f6a9561ed2fea90bf56458f1e99b6ec54c79","isMergeCommit":false,"messageTitle":"Update Jeeves Class: Add exception handling for \"mark\" command","messageBody":"Also updated test cases and expected outputs with new expected\nbehaviour\n","tags":["A-Exceptions"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":63,"deletions":7},"bat":{"insertions":1,"deletions":0}}},{"hash":"4c379235ba2ed4d7bda8d89c0e903ebff87ef6c4","isMergeCommit":false,"messageTitle":"Update Jeeves Class: Add exception handling for \"unmark\" command","messageBody":"Also updated test cases and expected outputs with new expected\nbehaviour\n","fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":1},"java":{"insertions":28,"deletions":7}}},{"hash":"c2b6f2d11831e8b9dfcf6b5fdc5dfde73f6422f5","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add exception handling for multiple commands","messageBody":"Specifically\n* todo\n* deadline\n* event\n\nAlso updated test cases and expected output with the expected behaviour\n","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":9,"deletions":0},"java":{"insertions":121,"deletions":30}}}]},{"date":"2023-08-26","commitResults":[{"hash":"eb41263481b71f3e703def0111ab6a187cfaace2","isMergeCommit":false,"messageTitle":"Update Jeeves class: Change taskList data structure to ArrayList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":15}}},{"hash":"918e0a8fb66e1bca14185013f055214e713393d1","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add Delete function","messageBody":"* Tasks can now be permanently removed from the task list.\n* Exception handling added for deleted tasks to \"mark\" and \"unmark\"\ncommands\n* Test cases and expected output updated to match new expected behaviour\n","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":61,"deletions":7}}}]},{"date":"2023-08-28","commitResults":[{"hash":"ac8ab0fa500cb1a723e614ede2cf340f4c294bd0","isMergeCommit":false,"messageTitle":"Update Jeeves class: Add datafile creation ability","messageBody":"Jeeves will automatically check for a saved task list and\ncreate the file and directory path required.\n\nAlso \u0027.gitignore\u0027 update to ignore the Task data as it does not make\nsense to track it with a RCS.\n","fileTypesAndContributionMap":{"java":{"insertions":28,"deletions":0}}}]},{"date":"2023-08-30","commitResults":[{"hash":"300596f5df00ad1c3fd9ca5467b2c31b1439c4c0","isMergeCommit":false,"messageTitle":"Update Jeeves to store tasks to an external data file","messageBody":"Updated the Task classes to be able to extract the required information\nto be written to the file.\nAlso updated test cases with new expected behaviour following a previous\nchange.\n","fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":9}}},{"hash":"004baba6d81eb444d3cc9ac057c430fb0716c895","isMergeCommit":false,"messageTitle":"Update Jeeves to read data from external data file","messageBody":"Task classes edited with new constructors to handle the new required\nscenario.\n","fileTypesAndContributionMap":{"java":{"insertions":69,"deletions":13}}},{"hash":"9f78cfcec3f84d54486ccb0ca6ea31389d2adb92","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{}}]},{"date":"2023-08-31","commitResults":[{"hash":"c4f83cbdf8e04df15ba010c03870d4d4bcd9075e","isMergeCommit":false,"messageTitle":"Update Jeeves to understand Dates","messageBody":"Deadline tasks can now officially support Dates in yyyy-MM-dd format\n","fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":9}}},{"hash":"f10db9081cb5954f11bb77a16606d3fe48b2a68e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"5be733b432cca8a17c4d773a3f693aae20ee669e","isMergeCommit":false,"messageTitle":"Retire deprecated redirection testing files","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":35},"bat":{"insertions":3,"deletions":2}}}]},{"date":"2023-09-03","commitResults":[{"hash":"64fce8737b21ba28a6d660461cbc9338887579dc","isMergeCommit":false,"messageTitle":"Refactor Jeeves class: Extract code to classes for better abstraction","messageBody":"Storage class deals with loading tasks from the file and writing\nto the file.\n\nUI class deals with user interactions.\n\nParser class deals with interpreting the user\u0027s command and extracting\nrelevant tokens for later usage.\n\nTaskList class deals with the task list and it\u0027s operations.\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":546,"deletions":405}}},{"hash":"959e0f0375a9f2261c4bb6a47c77bf96d3577dd7","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"39b36624b92d588769f86cb7efe5fc9e294f5ff8","isMergeCommit":false,"messageTitle":"Add Gradle wrappers to project","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"JasonLCY-Temp":{"java":795,"md":0,"fxml":0,"sh":0,"bat":8,"gradle":2,"txt":0}},"authorContributionVariance":{"JasonLCY-Temp":57536.953},"authorDisplayNameMap":{"JasonLCY-Temp":"CS2103T-T11-2 JASO.. YEN"}} diff --git a/JasonRay168_ip_master/authorship.json b/JasonRay168_ip_master/authorship.json index 8905a88b..2660b167 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":"-"},"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":"JasonRay168"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"JasonRay168":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.TaskList;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Input;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" * The main class for Duke Chatbot","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store task list */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle list of tasks operations */","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user interactions */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user inputs */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" if (storage.fileExists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList(storage.loadTasksData());","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" ui.greetings();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" boolean endSession \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" while(endSession) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" String userInput \u003d ui.inputSession();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" Input parsedInput \u003d parser.parse(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" endSession \u003d ui.handleInput(tasks, parsedInput, parser);","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" tasks.overwriteTasksData(storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" new Duke(\"./tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":50}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\tpublic DukeException(String errorMessage) {","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":" public EmptyListException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":" public InvalidCommandException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/exceptions/InvalidCommandSyntaxException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":" public InvalidCommandSyntaxException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/exceptions/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":" public InvalidTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/exceptions/InvalidTaskTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":" public InvalidTaskTimeException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/exceptions/MissingTaskDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":" public MissingTaskDescriptionException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/exceptions/MissingTaskNameException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":" public MissingTaskNameException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/exceptions/MissingTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":" public MissingTaskNumberException(String errorMessage) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":10}},{"path":"src/main/java/duke/utilities/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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":" /** Deadline of a deadline task */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" private String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" * Creates new instance of a deadline task","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" public Deadline(String name, String deadline) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.DEADLINE, \" (by: \"+ deadline + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" public String getDeadline() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" return this.deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" }","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/duke/utilities/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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":" /** Start time of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" private String start;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" /** End time of the task */","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" private String end;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of an event task","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" * @param start Start time of task","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" * @param end End time of task","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" public Event(String name, String start, String end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" super(name, Type.EVENT, \" (from: \"+ start + \" to: \" + end + \")\");","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" this.start \u003d start;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" this.end \u003d end;","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" public String getStart() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" return this.start;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" public String getEnd() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" return this.end;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"JasonRay168":33}},{"path":"src/main/java/duke/utilities/Input.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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":"\tprivate String command;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\tprivate String fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\tprivate int wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\tpublic Input(String command, String fullInput ,int wordLength) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"\t\tthis.command \u003d command;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"\t\tthis.fullInput \u003d fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"\t\tthis.wordLength \u003d wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"\t}","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"\tpublic String getCommand() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"\t\treturn this.command;","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"\t}","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"\tpublic int getLength() {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"\t\treturn this.wordLength;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"\t}","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"\t","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"\tpublic String getFullInput() {","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"\t\treturn this.fullInput;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"\t}","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":28}},{"path":"src/main/java/duke/utilities/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Deals with making sense of user commands","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" public Input parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" String[] split \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" String command \u003d split[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" int length \u003d split.length;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" return new Input(command, input, length);","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" * Parses and formats the date input into another format","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" * @param strDate Date in String format","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" * @return Date in \"MMM dd yyyy\" format","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" public String formatDate(String strDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" String result \u003d \"Invalid date\";","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" LocalDate parseDate \u003d LocalDate.parse(strDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" result \u003d parseDate.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e + \"\\nDate needs to be in the form of yyyy-mm-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":35}},{"path":"src/main/java/duke/utilities/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" * Handles loading and saving tasks into the tasks.txt file","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store relative file path */","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" File file;","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" boolean exists;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" this.exists \u003d !file.createNewFile();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! IOException\" + e);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" }","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":" * Overwrites existing data in tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" * @param list List of tasks that will overwrite the data in the file","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" FileOutputStream fos \u003d new FileOutputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" ObjectOutputStream oos \u003d new ObjectOutputStream(fos);","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" oos.writeObject(list);","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" oos.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" oos.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" * Loads the data from tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" * @return A list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" public ArrayList\u003cTask\u003e loadTasksData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" FileInputStream fis \u003d new FileInputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" ObjectInputStream ois \u003d new ObjectInputStream(fis);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" list \u003d (ArrayList\u003cTask\u003e) ois.readObject();","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" ois.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! Class is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" return list;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" public boolean fileExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" return this.exists;","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":73}},{"path":"src/main/java/duke/utilities/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":" * Class for tasks","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class Task implements Serializable {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" /** Name of task */","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" private String name;","lastModifiedDate":"2023-08-22"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" /** Task description, including time */","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" private String desc;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /** Variable to reflect whether a task is finished */","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /** Type of task, can be either a todo, deadline, or event */","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" private Type type;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of a Task object","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" * @param name Name of task","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" * @param type Type of task","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" * @param desc Task description, which includes by, to, and from","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" public Task(String name, Type type, String desc) {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" this.type \u003d type;","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" this.desc \u003d desc;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as done","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have marked this task as done\");","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + this.convertToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as not done","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have marked this task as not done\");","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + this.convertToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" * Converts the task object to a String text for display","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" * @return the String representation of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" public String convertToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" return \"[\" + this.getType().charAt(0) + \"][\" + (this.isDone() ? \"X\" : \" \") + \"] \" + this.getName() + this.desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" public String getName() {","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" return this.name;","lastModifiedDate":"2023-08-22"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-22"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" public String getType() {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" return this.type.name();","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"JasonRay168":72}},{"path":"src/main/java/duke/utilities/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" * Contains the task list and its operations","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"public class TaskList {","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store the tasks */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" private ArrayList\u003cTask\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" public TaskList(ArrayList\u003cTask\u003e list) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" this.list \u003d list;","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" public TaskList() {","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" this.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" * Manipulates the data of existing tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" * Includes marking, unmarking, and deleting tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" * @param fullInput Full String input by user","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" * @param command First word of input that signifies the command to be run","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" * @param beginIndex Beginning index of the command description excluding the command itself","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" * @throws InvalidTaskNumberException","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" public void manipulateTasks(String fullInput, String command, int beginIndex) throws InvalidTaskNumberException {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" int taskNum \u003d Integer.parseInt(fullInput.substring(beginIndex));","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" if (taskNum \u003e this.getSize() || taskNum \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskNumberException(\"Task number is out of bounds, please try again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" this.getTask(taskNum - 1).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" this.getTask(taskNum - 1).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" this.deleteTask(this.getTask(taskNum - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" public void addToDo(String taskName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" ToDo task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[T][ ] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + list.size() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" public void addDeadline(String taskName, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" Deadline task \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[D][ ] \" + taskName + \" (by: \"+ deadline + \")\");","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + this.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" public void addEvent(String taskName, String start, String end) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" Event task \u003d new Event(taskName, start, end);","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" this.list.add(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[E][ ] \" + taskName + \" (from: \"+ start + \" to: \" + end + \")\");","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + list.size() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"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":" * Deletes a task from the specified list","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" * @param task Task object to be deleted","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" public void deleteTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have deleted a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + task.convertToString());","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" this.list.remove(task);","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + this.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" storage.overwriteTasksData(this.list);","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" return this.list.get(index);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" return this.list.size();","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":100}},{"path":"src/main/java/duke/utilities/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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/duke/utilities/Type.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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/duke/utilities/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.*;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":" * Handles user interaction","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"public class Ui {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" /** Variable to detect user input */","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" /** Variable to show horizontal lines */","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" public static final String LINE_BREAK \u003d (\"--------------------------------------------------\"","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" + \"---------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" public void greetings() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"Welcome. My name is Duke\");","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"What will you do today?\");","lastModifiedDate":"2023-08-30"},{"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":" public String inputSession() {","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" String input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" return input;","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":" public boolean handleInput(TaskList tasks, Input input, Parser parser) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" boolean endSession \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" int inputLength \u003d input.getLength();","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003e 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027list\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" if (tasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"List is empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 1; i \u003c tasks.getSize() + 1; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" Task current \u003d tasks.getTask(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" System.out.println(i + \". \" + current.convertToString());","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"mark\")","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" || command.equals(\"unmark\")","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" || command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNumberException(\"Task number cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" } else if (tasks.getSize() \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" throw new EmptyListException(\"List is currently empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"mark\", 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"unmark\", 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"delete\", 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d fullInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" tasks.addToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Deadline task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(9).split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(\"Deadline task must have exactly one /by deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Deadline task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" String strDeadline \u003d taskDesc[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" String deadline \u003d parser.formatDate(strDeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" if (deadline.equals(\"Invalid date\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" tasks.addDeadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Event task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(6).split(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one /from and one /to times, in that order\");","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" String[] fromAndTo \u003d taskDesc[1].split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" if (fromAndTo.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one /from and one /to times, in that order\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Event task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":" String strStart \u003d fromAndTo[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":" String strEnd \u003d fromAndTo[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":" String start \u003d parser.formatDate(strStart);","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":" if (start.equals(\"Invalid date\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":" String end \u003d parser.formatDate(strEnd);","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":" if (end.equals(\"Invalid date\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-31"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":" tasks.addEvent(taskName, start, end);","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003e 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027bye\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"I hope you enjoy my service. Thank you and goodbye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" endSession \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandException(\"No such command exists, please try again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":138}},{"path":"src/test/java/duke/utilities/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","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":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"","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":" Input input \u003d parser.parse(\"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"todo\");","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 2);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"todo eat\");","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" public void test2() {","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"event\");","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 6);","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"event camp /from 2023-03-05 /to 2023-03-06\");","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public void test3() {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" Input input \u003d parser.parse(\"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" int length \u003d input.getLength();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" assertEquals(command, \"hello\");","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" assertEquals(length, 7);","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" assertEquals(fullInput, \"hello world, nice to meet you all\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" public void test4() {","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"2023-09-03\");","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Sep 03 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" @Test","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" public void test5() {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" String formattedDate \u003d parser.formatDate(\"August 23, 2023\");","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" assertEquals(formattedDate, \"Invalid date\");","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":52}},{"path":"src/test/java/duke/utilities/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"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\\duke -Xlint:none -d ..\\bin ..\\src\\main\\java\\duke\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"java -classpath ..\\bin 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":{"-":20,"JasonRay168":1}},{"path":"tasks.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"JasonRay168":0}},{"path":"text-ui-test/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":"-"},"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":"JasonRay168"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":41,"JasonRay168":2}},{"path":"src/main/java/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Input;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import duke.utilities.Ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":" * The main class for Duke Chatbot","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"public class Duke {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store task list */","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" private Storage storage;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle list of tasks operations */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" private TaskList tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user interactions */","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private Ui ui;","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" /** Variable to handle user inputs */","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" private Parser parser;","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" * Creates a new instance of Duke chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * @param filePath","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" if (storage.fileExists()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList(storage.loadTasksData());","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" * Starts the execution of the chatbot","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" public void run() {","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" ui.greet();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" boolean endSession \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" while (endSession) {","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" String userInput \u003d ui.startInputSession();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" Input parsedInput \u003d parser.parse(userInput);","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" endSession \u003d ui.handleInput(tasks, parsedInput, parser);","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" tasks.overwriteTasksData(storage);","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" }","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":" public static void main(String[] args) {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" new Duke(\"./tasks.txt\").run();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"JasonRay168":59}},{"path":"src/main/java/duke/exceptions/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","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/duke/exceptions/EmptyListException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","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/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","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/duke/exceptions/InvalidCommandSyntaxException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","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/duke/exceptions/InvalidTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","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/duke/exceptions/InvalidTaskTimeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","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/duke/exceptions/MissingTaskDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","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/duke/exceptions/MissingTaskNameException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","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/duke/exceptions/MissingTaskNumberException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.exceptions;","lastModifiedDate":"2023-08-30"},{"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":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"\t * Creates a new instance of this exception","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"\t * @param errorMessage Error message to be displayed when exception is caught","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"\t */","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/duke/utilities/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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":"\t","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/duke/utilities/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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":"\t","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/duke/utilities/Input.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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":"\t/** 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":"\t/** 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":"\t/** 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/duke/utilities/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" * Deals with making sense of user commands","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"\t * Parses the user input to identify its important parts","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":"\t * @param input","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"\t * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" public Input parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" String[] split \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":" String command \u003d split[0].toLowerCase();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" int length \u003d split.length;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" return new Input(command, input, length);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":" * Parses and formats the date input into another format","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" * @param strDate Date in String format","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" * @return Date in \"MMM dd yyyy\" format","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" public String formatDate(String strDate) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" String result \u003d \"Invalid date\";","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" LocalDate parseDate \u003d LocalDate.parse(strDate);","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"JasonRay168"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"JasonRay168"},"content":" result \u003d parseDate.format(formatter);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"JasonRay168"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e + \"\\nDate needs to be in the form of yyyy-mm-dd\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" return result;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":42}},{"path":"src/main/java/duke/utilities/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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.FileOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"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":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"/**","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"JasonRay168"},"content":" * Handles loading and saving tasks into the tasks.txt file","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"JasonRay168"},"content":"public class Storage {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"content":" /** Variable to store relative file path */","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"JasonRay168"},"content":" private File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":"\t/** Variable to check if File already exists */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":" private boolean isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":"\t * Creates new Storage objects to store filpath and file","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"\t * ","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":"\t * @param filePath Path of the tasks.txt file","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" this.file \u003d new File(filePath);","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" this.isCreated \u003d !file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! IOException\" + e);","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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" * Overwrites existing data in tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" * @param tasks List of tasks that will overwrite the data in the file","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" FileOutputStream fos \u003d new FileOutputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" ObjectOutputStream oos \u003d new ObjectOutputStream(fos);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" oos.writeObject(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" oos.flush();","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" oos.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"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":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" * Loads the data from tasks.txt","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" * @return A list of tasks","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" public ArrayList\u003cTask\u003e loadTasksData() {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" FileInputStream fis \u003d new FileInputStream(file);","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" ObjectInputStream ois \u003d new ObjectInputStream(fis);","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" tasks \u003d (ArrayList\u003cTask\u003e) ois.readObject();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" ois.close();","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! File is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" } catch (ClassNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! Class is not found\");","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"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":" public boolean fileExists() {","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" return this.isCreated;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":82}},{"path":"src/main/java/duke/utilities/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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":"\t","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;","lastModifiedDate":"2023-09-02"},{"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-08-28"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have marked this task as done\");","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + this.convertToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" * Marks a task as not done","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have marked this task as not done\");","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + this.convertToString());","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" * Converts the task object to a String text for display","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" * @return the String representation of the task","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" public String convertToString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" return \"[\" + this.getType().charAt(0) + \"]\" ","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":"\t\t\t\t+ \"[\" + (this.isDone() ? \"X\" : \" \") + \"] \"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":"\t\t\t\t+ this.getName() + this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" public String getName() {","lastModifiedDate":"2023-08-22"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" return this.name;","lastModifiedDate":"2023-08-22"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-22"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" return this.isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" public String getType() {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" return this.type.name();","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"JasonRay168":76}},{"path":"src/main/java/duke/utilities/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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 duke.exceptions.InvalidTaskNumberException;","lastModifiedDate":"2023-08-30"},{"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":" * @throws InvalidTaskNumberException","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" public void manipulateTasks(String fullInput, String command, int beginIndex) throws InvalidTaskNumberException {","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" int taskNum \u003d Integer.parseInt(fullInput.substring(beginIndex));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" if (taskNum \u003e this.getSize() || taskNum \u003c 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskNumberException(\"Task number is out of bounds, please try again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" this.getTask(taskNum - 1).markAsDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" this.getTask(taskNum - 1).markAsNotDone();","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" this.deleteTask(this.getTask(taskNum - 1));","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" break;","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":"","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" * Adds a todo task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" public void addToDo(String taskName) {","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" ToDo task \u003d new ToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[T][ ] \" + taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" ","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" * Adds a deadline task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" * @param deadline Deadline date of task","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" public void addDeadline(String taskName, String deadline) {","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" Deadline task \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[D][ ] \" + taskName + \" (by: \" + deadline + \")\");","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + this.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" * Adds an event task into the list","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" * @param taskName Name of task","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" * @param start Start date of task","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" * @param end End date of task","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" public void addEvent(String taskName, String startDate, String endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" Event task \u003d new Event(taskName, startDate, endDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" this.tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have added a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t[E][ ] \" + taskName + \" (from: \" + startDate + \" to: \" + endDate + \")\");","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" * Deletes a task from the list","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" * @param task Task to be deleted","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" public void deleteTask(Task task) {","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"You have deleted a task:\");","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\t\" + task.convertToString());","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" this.tasks.remove(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are now \" + this.getSize() + \" tasks in the list\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":"\t/**","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":"\t * Copies and filters the task list to only display tasks with the keyword mentioned","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":"\t *","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":"\t * @param keyword The keyword that will be compared to the task names","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":"\t * @return The filtered list","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":"\t */","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":"\tpublic ArrayList\u003cTask\u003e filterTaskName(String keyword) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":"\t\tArrayList\u003cTask\u003e tasksCopied \u003d new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":"\t\ttasksCopied.removeIf(task -\u003e !task.getName().toLowerCase().contains(keyword.toLowerCase()));","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":"\t\treturn tasksCopied;","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":"\t}","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" * Overwrites the current list with the list stored in hard drive","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" * @param storage Storage object that points to the stored file","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" public void overwriteTasksData(Storage storage) {","lastModifiedDate":"2023-08-31"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" storage.overwriteTasksData(this.tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" public int getSize() {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":" return this.tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":140}},{"path":"src/main/java/duke/utilities/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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/duke/utilities/Type.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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/duke/utilities/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-30"},{"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 duke.exceptions.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.EmptyListException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidCommandSyntaxException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.InvalidTaskTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.MissingTaskDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.MissingTaskNameException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"JasonRay168"},"content":"import duke.exceptions.MissingTaskNumberException;","lastModifiedDate":"2023-09-02"},{"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-08-30"},{"lineNumber":21,"author":{"gitId":"JasonRay168"},"content":" private Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"JasonRay168"},"content":" /** Variable to show horizontal lines */","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"JasonRay168"},"content":" public static final String LINE_BREAK \u003d (\"--------------------------------------------------\"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"JasonRay168"},"content":" + \"---------------------------------\");","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"JasonRay168"},"content":" * Prints greetings to the user interface","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"JasonRay168"},"content":" public void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"Welcome. My name is Duke\");","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"What will you do today?\");","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-09-02"},{"lineNumber":38,"author":{"gitId":"JasonRay168"},"content":" * Allows users to type in their inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"JasonRay168"},"content":" * ","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"JasonRay168"},"content":" * @return Input as String","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"JasonRay168"},"content":" public String startInputSession() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"\\n\");","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"JasonRay168"},"content":" String input \u003d sc.nextLine().trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"JasonRay168"},"content":" return input;","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"JasonRay168"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"JasonRay168"},"content":" * Handles the various cases of user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"JasonRay168"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"JasonRay168"},"content":" * @param tasks TaskList object that contains the list","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"JasonRay168"},"content":" * @param input Input object that contains parsed user input","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"JasonRay168"},"content":" * @param parser Parser used to parse user inputs","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"JasonRay168"},"content":" * @return True or false signifying breaking or continuing the loop","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"JasonRay168"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"JasonRay168"},"content":" public boolean handleInput(TaskList tasks, Input input, Parser parser) {","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"JasonRay168"},"content":" boolean endSession \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"JasonRay168"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"JasonRay168"},"content":" String command \u003d input.getCommand();","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"JasonRay168"},"content":" String fullInput \u003d input.getFullInput();","lastModifiedDate":"2023-08-30"},{"lineNumber":63,"author":{"gitId":"JasonRay168"},"content":" int inputLength \u003d input.getLength();","lastModifiedDate":"2023-08-30"},{"lineNumber":64,"author":{"gitId":"JasonRay168"},"content":" if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":65,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003e 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":66,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027list\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"JasonRay168"},"content":" if (tasks.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"List is empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 1; i \u003c tasks.getSize() + 1; i++) {","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"JasonRay168"},"content":" Task current \u003d tasks.getTask(i - 1);","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"JasonRay168"},"content":" System.out.println(i + \". \" + current.convertToString());","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"mark\")","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"JasonRay168"},"content":" || command.equals(\"unmark\")","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"JasonRay168"},"content":" || command.equals(\"delete\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"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":" switch (command) {","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"JasonRay168"},"content":" case \"mark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"mark\", 5);","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"JasonRay168"},"content":" case \"unmark\":","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"unmark\", 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"JasonRay168"},"content":" case \"delete\":","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"JasonRay168"},"content":" tasks.manipulateTasks(fullInput, \"delete\", 7);","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"JasonRay168"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"JasonRay168"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":99,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":100,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":101,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d fullInput.substring(5);","lastModifiedDate":"2023-08-30"},{"lineNumber":102,"author":{"gitId":"JasonRay168"},"content":" tasks.addToDo(taskName);","lastModifiedDate":"2023-08-30"},{"lineNumber":103,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Deadline task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(9).split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":108,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":109,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(\"Deadline task must have exactly one /by deadline\");","lastModifiedDate":"2023-08-30"},{"lineNumber":110,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":111,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":112,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Deadline task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"JasonRay168"},"content":" String strDeadline \u003d taskDesc[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"JasonRay168"},"content":" String deadline \u003d parser.formatDate(strDeadline);","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"JasonRay168"},"content":" if (deadline.equals(\"Invalid date\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":120,"author":{"gitId":"JasonRay168"},"content":" tasks.addDeadline(taskName, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003c\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Event task description cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"JasonRay168"},"content":" String[] taskDesc \u003d fullInput.substring(6).split(\"/from\");","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"JasonRay168"},"content":" if (taskDesc.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":127,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one /from and one /to times, in that order\");","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"JasonRay168"},"content":" String taskName \u003d taskDesc[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"JasonRay168"},"content":" String[] fromAndTo \u003d taskDesc[1].split(\"/to\");","lastModifiedDate":"2023-08-30"},{"lineNumber":132,"author":{"gitId":"JasonRay168"},"content":" if (fromAndTo.length !\u003d 2) {","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidTaskTimeException(","lastModifiedDate":"2023-08-30"},{"lineNumber":134,"author":{"gitId":"JasonRay168"},"content":" \"Event task must have exactly one /from and one /to times, in that order\");","lastModifiedDate":"2023-08-30"},{"lineNumber":135,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":136,"author":{"gitId":"JasonRay168"},"content":" if (taskName.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-30"},{"lineNumber":137,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskNameException(\"Event task name cannot be empty\");","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"JasonRay168"},"content":" String strStart \u003d fromAndTo[0].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"JasonRay168"},"content":" String strEnd \u003d fromAndTo[1].trim();","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"JasonRay168"},"content":" String start \u003d parser.formatDate(strStart);","lastModifiedDate":"2023-08-31"},{"lineNumber":142,"author":{"gitId":"JasonRay168"},"content":" if (start.equals(\"Invalid date\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-31"},{"lineNumber":144,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":145,"author":{"gitId":"JasonRay168"},"content":" String end \u003d parser.formatDate(strEnd);","lastModifiedDate":"2023-08-31"},{"lineNumber":146,"author":{"gitId":"JasonRay168"},"content":" if (end.equals(\"Invalid date\")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":147,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"JasonRay168"},"content":" tasks.addEvent(taskName, start, end);","lastModifiedDate":"2023-08-30"},{"lineNumber":150,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"find\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"JasonRay168"},"content":" throw new MissingTaskDescriptionException(\"Todo task description cannot be empty\");","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"JasonRay168"},"content":" String taskToBeFound \u003d fullInput.substring(5);","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"JasonRay168"},"content":" ArrayList\u003cTask\u003e tasksFiltered \u003d tasks.filterTaskName(taskToBeFound);","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"JasonRay168"},"content":" int size \u003d tasksFiltered.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"JasonRay168"},"content":" if (size \u003e 0) { ","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"JasonRay168"},"content":"\t\t\t\t System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"JasonRay168"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"JasonRay168"},"content":" System.out.println((i + 1) + \". \" + tasksFiltered.get(i).convertToString());","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"There are no matching tasks in your list\");","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"JasonRay168"},"content":" } else if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"JasonRay168"},"content":" if (inputLength \u003e 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandSyntaxException(\"\u0027bye\u0027 command must not be followed by anything\");","lastModifiedDate":"2023-08-30"},{"lineNumber":168,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":169,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"I hope you enjoy my service. Thank you and goodbye\");","lastModifiedDate":"2023-08-30"},{"lineNumber":170,"author":{"gitId":"JasonRay168"},"content":" System.out.println(LINE_BREAK);","lastModifiedDate":"2023-08-30"},{"lineNumber":171,"author":{"gitId":"JasonRay168"},"content":" endSession \u003d false;","lastModifiedDate":"2023-08-30"},{"lineNumber":172,"author":{"gitId":"JasonRay168"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":173,"author":{"gitId":"JasonRay168"},"content":" throw new InvalidCommandException(\"No such command exists, please try again\");","lastModifiedDate":"2023-08-30"},{"lineNumber":174,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"JasonRay168"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":176,"author":{"gitId":"JasonRay168"},"content":" System.out.println(\"!ERROR! \" + e);","lastModifiedDate":"2023-08-31"},{"lineNumber":177,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":178,"author":{"gitId":"JasonRay168"},"content":" return endSession;","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"JasonRay168"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"JasonRay168"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"JasonRay168":180}},{"path":"src/test/java/duke/utilities/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"JasonRay168"},"content":"public class ParserTest {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"JasonRay168"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-08-31"},{"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/duke/utilities/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"JasonRay168"},"content":"package duke.utilities;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"JasonRay168"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"JasonRay168"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"JasonRay168"},"content":"","lastModifiedDate":"2023-08-31"},{"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\\duke\\*.java","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"JasonRay168"},"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":{"-":19,"JasonRay168":2}},{"path":"src/main/java/tasks.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"JasonRay168":0}},{"path":"tasks.txt","fileType":"txt","isBinary":true,"lines":[],"authorContributionMap":{"JasonRay168":0}},{"path":"text-ui-test/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 dc963759..0518b738 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":{}}]}]},"authorFileTypeContributionMap":{"JasonRay168":{"java":740,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":2,"txt":28}},"authorContributionVariance":{"JasonRay168":83174.63},"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":{}}]}]},"authorFileTypeContributionMap":{"JasonRay168":{"java":912,"md":0,"fxml":0,"sh":0,"bat":2,"gradle":2,"txt":28}},"authorContributionVariance":{"JasonRay168":77217.12},"authorDisplayNameMap":{"JasonRay168":"CS2103T-W12-1 JASO.. RAY"}} diff --git a/Kokseng1_ip_master/authorship.json b/Kokseng1_ip_master/authorship.json index be3fd899..19ed7718 100644 --- a/Kokseng1_ip_master/authorship.json +++ b/Kokseng1_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" final LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" public Deadline(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(9, desc.indexOf(\"/by\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" String byString \u003d desc.substring(desc.indexOf(\"/by\") + 4).replace(\" \", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" this.by \u003d LocalDate.parse(byString);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":22}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" Scanner scan \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" String next \u003d scan.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" String[] nextParts \u003d next.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" while (!next.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d TaskFile.loadTasks();","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" if (nextParts.length \u003c\u003d 1 \u0026\u0026 !nextParts[0].toLowerCase().equals(\"list\")) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to write the task\");","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" switch (nextParts[0].toLowerCase()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" case \"list\": {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" System.out.println((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" case \"mark\": {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Integer.parseInt(next.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" tasks.get(tasknum).mark();","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\\n\" + tasks.get(tasknum));","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Integer.parseInt(next.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" tasks.get(tasknum).unmark();","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\\n\" + tasks.get(tasknum));","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" case \"deadline\": {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" if (!next.contains(\"/by\") || next.length() \u003c\u003d next.indexOf(\"/by\") + 4) {","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the deadline ends!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d new Deadline(false, next);","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Got it. I\u0027ve added this task: \\n\" + nextTask + \"\\nnow you have \"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" case \"event\": {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" if (!next.contains(\"/from\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event starts!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" if (!next.contains(\"/to\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event ends!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d new Event(false, next);","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Got it. I\u0027ve added this task: \\n\" + nextTask + \"\\nnow you have \"","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" case \"todo\": {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d new Todo(false, next);","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Got it. I\u0027ve added this task: \\n\" + nextTask + \"\\nnow you have \"","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" case \"delete\": {","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" int deleteIndex \u003d Integer.parseInt(next.split(\" \")[1]) - 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(deleteIndex);","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-08-28"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" default : {","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":87,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"Kokseng1"},"content":" TaskFile.saveTask(tasks);","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"Kokseng1"},"content":" catch (DukeException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"Kokseng1"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-23"},{"lineNumber":92,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":93,"author":{"gitId":"Kokseng1"},"content":" next \u003d scan.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":94,"author":{"gitId":"Kokseng1"},"content":" nextParts \u003d next.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":96,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":98,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":94,"-":4}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"class DukeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"class Event extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" final LocalDate from;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" final LocalDate to;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public Event(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(6, desc.indexOf(\"/from\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" int fromIndex \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" int toIndex \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" String fromString \u003d desc.substring(fromIndex + 6, toIndex).replace(\" \", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" String toString \u003d desc.substring(toIndex + 4).replace(\" \", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" this.from \u003d LocalDate.parse(fromString);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" this.to \u003d LocalDate.parse(toString);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You didn\u0027t enter the event in the correct format!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" return \"[E]\" + super.toString() + \"(from: \" + this.from.format(formatter) + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":33}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" protected final String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public void mark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public void unmark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException{","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" Task task \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(1); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":59}},{"path":"src/main/java/TaskFile.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.util.List;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.io.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"class TaskFile {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" final static String fileName \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" static void checkFileExists() {","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" Path path \u003d Paths.get(fileName);","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"data file not found, creating a new one\");","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" Path dirPath \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" Files.createDirectories(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" File file \u003d new File(fileName);","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" file.createNewFile();","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public static void saveTask(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" try (FileWriter fileWriter \u003d new FileWriter(fileName)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"T|\" + done + \"|\" + desc;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" LocalDate from \u003d ((Event) task).from;","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" LocalDate to \u003d ((Event) task).to;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"E|\" + done + \"|\" + desc + \"|\" + from + \"|\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" LocalDate by \u003d ((Deadline) task).by;","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"D|\" + done + \"|\" + desc + \"|\" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" fileWriter.write(text + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e loadTasks() throws DukeException{","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" Scanner sc \u003d new Scanner(new File(fileName));","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" tasks.add(Task.parse(sc.nextLine()));","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":76}},{"path":"src/main/java/TaskParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"public class TaskParseException {","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Kokseng1":2}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"class Todo extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public Todo(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(5));","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" if (desc.substring(5).isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to enter the task!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":13}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by 2020-10-19","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from 2019-12-02 /to 2019-12-03","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"event","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"unmark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"delete 1","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Kokseng1":20}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kokseng1":1,"-":20}}] +[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"class Deadline extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" final LocalDate by;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" public Deadline(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(9, desc.indexOf(\"/by\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" String byString \u003d desc.substring(desc.indexOf(\"/by\") + 4).replace(\" \", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" this.by \u003d LocalDate.parse(byString);","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.by.format(formatter) + \")\";","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":22}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public enum TaskType {","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" BYE,","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" LIST,","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" MARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" UNMARK,","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" DELETE,","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" EVENT,","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" TODO,","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" DEADLINE","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" public static void run() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" Ui.printGreeting();","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" String inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" TaskType taskType \u003d null;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" while (taskType !\u003d TaskType.BYE) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" taskList.updateFromStorage(); //load tasks from hard drive if it is available, into taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" switch (taskType) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" case LIST: {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" taskList.printList();","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" case MARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getMarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" taskList.markTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" case UNMARK: {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" int tasknum \u003d Parser.getUnmarkIndex(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" taskList.unmarkTask(tasknum);","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" case TODO:","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" case EVENT:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Parser.parseTask(inputString, taskType);","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" taskList.addTask(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" case DELETE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" taskList.deleteTask(Parser.getDeleteIndex(inputString));","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"I can\u0027t identify your command!\");","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" taskList.saveList();","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" taskType \u003d Parser.parseType(inputString);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" } catch (TaskParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" Ui.print(e.getMessage());","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" inputString \u003d Ui.readCommand();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" Duke.run();","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":74,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Kokseng1":70,"-":4}},{"path":"src/main/java/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"class DukeException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":5}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"class Event extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" final LocalDate from;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" final LocalDate to;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" private final DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMMM yyyy\");","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" public Event(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(6, desc.indexOf(\"/from\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" int fromIndex \u003d desc.indexOf(\"/from\");","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" int toIndex \u003d desc.indexOf(\"/to\");","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" String fromString \u003d desc.substring(fromIndex + 6, toIndex).replace(\" \", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" String toString \u003d desc.substring(toIndex + 4).replace(\" \", \"\");","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" this.from \u003d LocalDate.parse(fromString);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" this.to \u003d LocalDate.parse(toString);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You didn\u0027t enter the event in the correct format!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Incorrect date format! Use eg.2019-12-02\");","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" return \"[E]\" + super.toString() + \"(from: \" + this.from.format(formatter)","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" + \" to: \" + this.to.format(formatter) + \")\";","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":34}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public static Integer getDeleteIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" public static Integer getMarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" public static Integer getUnmarkIndex(String text) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" return Integer.parseInt(text.split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" public static Task parseTask(String text, Duke.TaskType type) throws DukeException, TaskParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" case TODO: {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" return new Todo(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" case DEADLINE: {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/by\") || text.length() \u003c\u003d text.indexOf(\"/by\") + 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the deadline ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" return new Deadline(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" case EVENT: {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/from\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event starts!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" if (!text.contains(\"/to\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to specify when the event ends!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" return new Event(false, text);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Not a task!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" public static Duke.TaskType parseType(String text) throws DukeException, TaskParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" String[] textParts \u003d text.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" String firstWord \u003d textParts[0].toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" if (textParts.length \u003c\u003d 1 \u0026\u0026 !firstWord.equals(\"list\") \u0026\u0026 !firstWord.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to write the task\");","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" switch (textParts[0].toLowerCase()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" case \"list\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.LIST;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.MARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.UNMARK;","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" case \"deadline\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DEADLINE;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" case \"event\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.EVENT;","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" case \"todo\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.TODO;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" case \"delete\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.DELETE;","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" case \"bye\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" return Duke.TaskType.BYE;","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Kokseng1"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Kokseng1"},"content":" throw new TaskParseException(\"Not a TaskType\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":85}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" static final String FILE_NAME \u003d \"./data/duke.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" static void checkFileExists() {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" Path path \u003d Paths.get(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"data file not found, creating a new one\");","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" Path dirPath \u003d Paths.get(\"./data\");","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" Files.createDirectories(dirPath);","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" File file \u003d new File(FILE_NAME);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" public static void saveTask(List\u003cTask\u003e tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" try (FileWriter fileWriter \u003d new FileWriter(FILE_NAME)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" for (Task task : tasks) {","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" String text \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" if (task instanceof Todo) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"T|\" + done + \"|\" + desc;","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" LocalDate from \u003d ((Event) task).from;","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" LocalDate to \u003d ((Event) task).to;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"E|\" + done + \"|\" + desc + \"|\" + from + \"|\" + to;","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" String done \u003d task.isDone","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" ? \"1\"","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":" : \"0\";","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" String desc \u003d task.description;","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" LocalDate by \u003d ((Deadline) task).by;","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" text \u003d \"D|\" + done + \"|\" + desc + \"|\" + by;","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":" fileWriter.write(text + \"\\n\");","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"Kokseng1"},"content":" public static ArrayList\u003cTask\u003e loadTasks() throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"Kokseng1"},"content":" checkFileExists();","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"Kokseng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"Kokseng1"},"content":" Scanner sc \u003d new Scanner(new File(FILE_NAME));","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Kokseng1"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"Kokseng1"},"content":" String next \u003d sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Kokseng1"},"content":" Task nextTask \u003d Task.parse(next);","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Kokseng1"},"content":" tasks.add(nextTask);","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"Kokseng1"},"content":" return tasks;","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"Kokseng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks\");","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":79}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" protected final String description;","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" public Task(boolean done, String description) {","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d done;","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" public void mark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task already done\");","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Nice! I\u0027ve marked this task as done:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" public void unmark() throws DukeException {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" if (!this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task still undone\");","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"OK, I\u0027ve marked this task as not done yet:\\n\" + toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":" return (\"[\" + this.getStatusIcon() + \"] \" + this.description);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" public static Task parse(String text) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" String[] parts \u003d text.split(\"\\\\|\");","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" String first \u003d parts[0];","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" Task task;","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" boolean done \u003d parts[1].equals(\"1\"); // 1 \u003d done, 0 \u003d undone","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" switch (first) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" case \"T\":","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Todo(done, \"todo \" + description);","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" case \"E\":","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Event(done, \"event \" + description + \" /from \" + from + \" /to \" + to);","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"Kokseng1"},"content":" case \"D\":","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"Kokseng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"Kokseng1"},"content":" task \u003d new Deadline(done, \"deadline \" + description + \" /by \" + by);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"Kokseng1"},"content":" break;","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Kokseng1"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Unable to parse from hard drive\");","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"Kokseng1"},"content":" return task;","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":62}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" public void saveList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" Storage.saveTask(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":" public void updateFromStorage() {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" tasks \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"No tasks found in storage, starting new list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Kokseng1"},"content":" public void printList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Kokseng1"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Kokseng1"},"content":" System.out.println((i + 1) + \".\" + tasks.get(i));","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Kokseng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Kokseng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Got it. I\u0027ve added this task: \\n\" + task + \"\\nnow you have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Kokseng1"},"content":" public void deleteTask(int i) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Kokseng1"},"content":" if (tasks.size() \u003c\u003d 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"There are no tasks to delete\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Kokseng1"},"content":" } else if (tasks.size() \u003c i) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"Task index out of range\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Kokseng1"},"content":" Task deleted \u003d tasks.remove(i);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Kokseng1"},"content":" Ui.print(\"Noted. I\u0027ve removed this task:\\n\" + deleted + \"\\nNow you have \"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Kokseng1"},"content":" + tasks.size() + \" tasks in the list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Kokseng1"},"content":" public void markTask(int i) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).mark();","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Kokseng1"},"content":" public void unmarkTask(int i) throws DukeException {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Kokseng1"},"content":" tasks.get(i).unmark();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":51}},{"path":"src/main/java/TaskParseException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"public class TaskParseException extends Exception {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public TaskParseException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" super(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"Kokseng1":5}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"class Todo extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":" public Todo(boolean done, String desc) throws DukeException {","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":" super(done, desc.substring(5));","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" if (desc.substring(5).isEmpty()) {","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":" throw new DukeException(\"You forgot to enter the task!\");","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"Kokseng1":13}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":" private static final Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":" public static String readCommand() {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":" public static void print(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":" public static void printGreeting() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":" String name \u003d \"Chaty\";","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Kokseng1"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Kokseng1"},"content":" System.out.println(\"Hello! I\u0027m \" + name + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Kokseng1"},"content":" + \"What can I do for you?\" + \"\\n\\n\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Kokseng1"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Kokseng1"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Kokseng1":20}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Kokseng1"},"content":"todo read book","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Kokseng1"},"content":"todo","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Kokseng1"},"content":"deadline return book /by 2019-12-02","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Kokseng1"},"content":"deadline return book","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"Kokseng1"},"content":"event project meeting /from 2019-12-02 /to 2019-12-03","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Kokseng1"},"content":"mark 2","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Kokseng1"},"content":"delete 3","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Kokseng1"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"Kokseng1"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Kokseng1":15}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"Kokseng1"},"content":"del ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"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":"-"},"content":"java -classpath ..\\bin Duke \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Kokseng1":1,"-":20}}] diff --git a/Kokseng1_ip_master/commits.json b/Kokseng1_ip_master/commits.json index 386aacc3..7f1dfc1c 100644 --- a/Kokseng1_ip_master/commits.json +++ b/Kokseng1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Kokseng1":[{"date":"2023-08-23","commitResults":[{"hash":"5437d9a251d312b0c589135871c0925aad4ed482","isMergeCommit":false,"messageTitle":"lvl0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5e8695955e97d167b6ad020761fd92a88503a944","isMergeCommit":false,"messageTitle":"lvl1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"5e7db755627af945303b5a36167afa5402cac3f8","isMergeCommit":false,"messageTitle":"lvl2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"e6ea6dc8966cda93d1c27acea70d7e3a4296c4e0","isMergeCommit":false,"messageTitle":"lvl3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":4}}},{"hash":"b8beb55918337818df99ebb1c29c19480a822b7b","isMergeCommit":false,"messageTitle":"lvl4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":4}}},{"hash":"83b988fb28add0a26169e11c33267a66fe644c11","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"ef2a2e6dbb28c8ac310224790069914f7c80748d","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3ee355ea6900f7dbd9e475a6393ff08c54f3b186","isMergeCommit":false,"messageTitle":"lvl6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":33,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2bc16fc54b63c437edbe68306a3217788a995eaa","isMergeCommit":false,"messageTitle":"add taskfile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":134},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"8b1fd67baa65d3eb7421d9c5d16126331a3af11a","isMergeCommit":false,"messageTitle":"lvl 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":24}}},{"hash":"07c02e8afd9cda034bcf72489f7b785cdd91b6f7","isMergeCommit":false,"messageTitle":"change if else statement to switch in Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":58}}},{"hash":"e199ebc6ec21b2b212ff5631c16d22b49917c780","isMergeCommit":false,"messageTitle":"lvl 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":18}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":304,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":20}},"authorContributionVariance":{"Kokseng1":14460.806},"authorDisplayNameMap":{"Kokseng1":"CS2103T-W13-1 NG K..SENG"}} +{"authorDailyContributionsMap":{"Kokseng1":[{"date":"2023-08-23","commitResults":[{"hash":"5437d9a251d312b0c589135871c0925aad4ed482","isMergeCommit":false,"messageTitle":"lvl0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":6}}},{"hash":"5e8695955e97d167b6ad020761fd92a88503a944","isMergeCommit":false,"messageTitle":"lvl1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":2}}},{"hash":"5e7db755627af945303b5a36167afa5402cac3f8","isMergeCommit":false,"messageTitle":"lvl2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":5}}},{"hash":"e6ea6dc8966cda93d1c27acea70d7e3a4296c4e0","isMergeCommit":false,"messageTitle":"lvl3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":41,"deletions":4}}},{"hash":"b8beb55918337818df99ebb1c29c19480a822b7b","isMergeCommit":false,"messageTitle":"lvl4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":4}}},{"hash":"83b988fb28add0a26169e11c33267a66fe644c11","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0}}},{"hash":"ef2a2e6dbb28c8ac310224790069914f7c80748d","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":5}}}]},{"date":"2023-08-24","commitResults":[{"hash":"3ee355ea6900f7dbd9e475a6393ff08c54f3b186","isMergeCommit":false,"messageTitle":"lvl6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":33,"deletions":24}}}]},{"date":"2023-08-28","commitResults":[{"hash":"2bc16fc54b63c437edbe68306a3217788a995eaa","isMergeCommit":false,"messageTitle":"add taskfile","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":174,"deletions":134},"bat":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"8b1fd67baa65d3eb7421d9c5d16126331a3af11a","isMergeCommit":false,"messageTitle":"lvl 7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":96,"deletions":24}}},{"hash":"07c02e8afd9cda034bcf72489f7b785cdd91b6f7","isMergeCommit":false,"messageTitle":"change if else statement to switch in Duke","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":73,"deletions":58}}},{"hash":"e199ebc6ec21b2b212ff5631c16d22b49917c780","isMergeCommit":false,"messageTitle":"lvl 8","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":42,"deletions":18}}}]},{"date":"2023-09-03","commitResults":[{"hash":"0a721863d7afb1018a6870f03021a1a8fd4f6cb8","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":10},"java":{"insertions":272,"deletions":130}}}]}]},"authorFileTypeContributionMap":{"Kokseng1":{"java":446,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":15}},"authorContributionVariance":{"Kokseng1":18408.336},"authorDisplayNameMap":{"Kokseng1":"CS2103T-W13-1 NG K..SENG"}} diff --git a/LINCHENYU2030S_ip_master/authorship.json b/LINCHENYU2030S_ip_master/authorship.json index 0aab0333..f8a20f4a 100644 --- a/LINCHENYU2030S_ip_master/authorship.json +++ b/LINCHENYU2030S_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Add.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public enum Add {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" TODO,","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" DEADLINE,","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" EVENT","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":5}},{"path":"src/main/java/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"public class AddCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" private Add addType;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" public AddCommand(String command, Add addType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" this.addType \u003d addType;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" switch(this.addType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!command.substring(4, 5).equals(\" \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Please enter a todo task in the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"todo (description)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" Task todo \u003d new ToDos(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForTodo();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /by \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter a deadline task in the format: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" \"deadline (description) /by yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" int startIndex \u003d matcher.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" int endIndex \u003d matcher.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d startIndex \u003e 9 ? command.substring(9, startIndex) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" String by \u003d command.substring(endIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(deadline);","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":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForDeadline();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","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":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /from \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern1 \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher1 \u003d pattern1.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher1.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstStart \u003d matcher1.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstEnd \u003d matcher1.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex2 \u003d \"\\\\b /to \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern2 \u003d Pattern.compile(regex2);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher2 \u003d pattern2.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher2.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondStart \u003d matcher2.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondEnd \u003d matcher2.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d firstStart \u003e 6 ? command.substring(6, firstStart) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromTime \u003d command.substring(firstEnd, secondStart);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" String toTime \u003d command.substring(secondEnd);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" Task event \u003d new Event(description, fromTime, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForEvent();","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":107}},{"path":"src/main/java/Alex.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Alex {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.greet();","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" UserInputStorage.loadUserDateFromFile();","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":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" new Alex().run();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":16}},{"path":"src/main/java/AlexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public class AlexException extends Exception{","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" public AlexException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LINCHENYU2030S":7}},{"path":"src/main/java/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" public abstract void execute();","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":3}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" public Deadline(String description, String by) throws AlexException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedDateTime \u003d LocalDateTime.parse(by, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getBy() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.by;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getDueDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" String dateString \u003d this.by.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate date \u003d LocalDate.parse(dateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" return date;","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":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" int hour \u003d parsedDateTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" int minute \u003d parsedDateTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" Month month \u003d parsedDateTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" int day \u003d parsedDateTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" int year \u003d parsedDateTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" (by: \" + hour +\":\"+ minute + \" \" + day + \" \" + month + \" \" + year + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":38}},{"path":"src/main/java/Edit.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public enum Edit {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" MARK,","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" UNMARK,","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" DELETE","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":5}},{"path":"src/main/java/EditCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public class EditCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" private Edit editType;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" public EditCommand(String command, Edit editType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" this.editType \u003d editType;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" switch (this.editType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" int index \u003d Integer.parseInt(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" Task targetedTask \u003d TaskList.getTaskByIndex(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" targetedTask.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForMark();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" int index \u003d Integer.parseInt(command.substring(7));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" Task targetedTask \u003d TaskList.getTaskByIndex(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" targetedTask.unmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForUnmark();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","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":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" int toDeleteIndex \u003d Integer.parseInt(command.substring(7, 8));","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.delete(toDeleteIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForDelete();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" }","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":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":62}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.Month;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String fromTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String toTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedFromTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedToTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" public Event(String description, String fromTime, String toTime) throws AlexException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedFromTime \u003d LocalDateTime.parse(fromTime, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedToTime \u003d LocalDateTime.parse(toTime, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getFromTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.fromTime;","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":" public String getToTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.toTime;","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":" public LocalDate getFromDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromDateString \u003d this.fromTime.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate fromDate \u003d LocalDate.parse(fromDateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" return fromDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getToDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" String toDateString \u003d this.toTime.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate toDate \u003d LocalDate.parse(toDateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" return toDate;","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":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromHour \u003d parsedFromTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromMinute \u003d parsedFromTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" Month fromMonth \u003d parsedFromTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromDay \u003d parsedFromTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromYear \u003d parsedFromTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" int toHour \u003d parsedToTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" int toMinute \u003d parsedToTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" Month toMonth \u003d parsedToTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" int toDay \u003d parsedToTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" int toYear \u003d parsedToTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" (from: \" + fromHour +\":\" + fromMinute + \" \" + fromDay + \" \" + fromMonth + \" \" + fromYear + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" to: \" + toHour + \":\" + toMinute + \" \" + toDay + \" \" + toMonth + \" \" + toYear + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":58}},{"path":"src/main/java/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ExitCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" public ExitCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.bye();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":12}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" public static Command parse(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" int commandLength \u003d command.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.MARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 6 \u0026\u0026 command.substring(0, 6).equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.UNMARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 6 \u0026\u0026 command.substring(0, 6).equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.DELETE;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.LISTALL;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"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":18,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.LISTONEDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 8 \u0026\u0026 command.substring(0, 8).equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 5 \u0026\u0026 command.substring(0, 5).equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ExitCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new UnknownCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" return c;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":36}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" public Task(String description) throws AlexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" description \u003d description.stripTrailing();","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The description of a task cannot be empty\";","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getStatusSymbol() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" if (isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"X\";","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" return \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.description;","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":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" + this","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(tobePrinted);","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" public void mark(boolean printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" if (printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" this.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" + this","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(tobePrinted);","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" String str \u003d \"[\" + this.getStatusSymbol() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" return str;","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":66}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" private static ArrayList\u003cTask\u003e userinputs \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" private static int numberOfElements \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" public static int getNumberOfElements() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" return numberOfElements;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void store(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements++;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have \" + numberOfElements + \" tasks in the list.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","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-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void store(Task task, boolean printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" if (printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" store(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements++;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" public static Task getTaskByIndex(int index) throws AlexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" if (index \u003e numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! There is/are only \" + numberOfElements + \" task(s) stored\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (index \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Task number cannot be negative, task number starts from 0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" return userinputs.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAllContent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + (i + 1) + \". \" + userinputs.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" + tobePrinted","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void delete(int index) throws AlexException{","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" if (index \u003e numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! There is/are only \" + numberOfElements + \" task(s) stored\";","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (index \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Task number cannot be negative, task number starts from 0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" Task tobeRemoved \u003d userinputs.remove(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements--;","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":" + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + tobeRemoved.toString() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have 4 tasks in the list.\\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":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printTaskForDate(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate parsedDate \u003d LocalDate.parse(date, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d userinputs.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" if (task instanceof ToDos) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" if (deadline.getDueDate().equals(parsedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + count + \". \" + deadline + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" if (event.getFromDate().equals(parsedDate) || event.getToDate().equals(parsedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + count + \". \" + event + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" }","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":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"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":104,"author":{"gitId":"LINCHENYU2030S"},"content":" + tobePrinted","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":109}},{"path":"src/main/java/ToDos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ToDos extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" public ToDos(String description) throws AlexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" String str \u003d \"[T]\" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" return str;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":11}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" public static final String horizontalLine \u003d \"_____________________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" private static Scanner userInputScanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" String greeting \u003d horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Hello! I\u0027m your personal task assistant, Alex\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"What can I do for you today?\\n\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" + horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" userInputScanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void bye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" String bye \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Bye bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" UserInputStorage.storeToFile();","lastModifiedDate":"2023-09-02"},{"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":" public static String readUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput \u003d userInputScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInputStripped \u003d userInput.stripTrailing();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" return userInputStripped;","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":" public static void printAlertForMark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"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":32,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"mark (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" );","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":" public static void printAlertForUnmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"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":41,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"unmark (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","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":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForDelete() {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"To delete a task, please use the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"delete (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"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":" public static void printAlertForTodo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Please enter a todo task in the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"todo (description)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" + message + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter a deadline task in the format: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" \"deadline (description) /by yyyy-MM-dd HHmm\\n\";","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":" + message","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":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForEvent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"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":87,"author":{"gitId":"LINCHENYU2030S"},"content":" \"in the format yyyy-MM-dd only.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Please also ensure that your key in date is a valid date\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Note that it is case sensitive\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForUnknown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"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":99,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","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":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":105}},{"path":"src/main/java/UnknownCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"// For handling unknown user command","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"public class UnknownCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" public UnknownCommand (String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForUnknown();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":14}},{"path":"src/main/java/UserInputStorage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-25"},{"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.LocalDate;","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":"public class UserInputStorage {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" public static final DateTimeFormatter TIMEFORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printFileContent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"../data/Alex.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userDataFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.getParentFile().mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" Scanner userDataScanner \u003d new Scanner(userDataFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" while (userDataScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" String userData \u003d userDataScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(userData);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void storeToFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" FileWriter fw \u003d new FileWriter(\"../data/Alex.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" int numberOfElements \u003d TaskList.getNumberOfElements();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 1; i \u003c\u003d numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d TaskList.getTaskByIndex(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" String taskInfo \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" if (task instanceof ToDos) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"T \" + task.getDescription() + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"D \" + deadline.getDescription() + \" /by \" + deadline.getBy()","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"E \" + event.getDescription() + \" /from \" + event.getFromTime() + \" /to \"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" + event.getToTime() + (task.isDone() ? \" 1\" : \" 0\");","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":" if (i \u003d\u003d numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.write(taskInfo);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.write(taskInfo + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(\"User data is successfully stored\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException | AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(\"Something went wrong when saving users data to Alex.txt: \" + e.getMessage());","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-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void loadUserDateFromFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"../data/Alex.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userDataFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.getParentFile().mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" Scanner userDataScanner \u003d new Scanner(userDataFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" while (userDataScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" String userData \u003d userDataScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" userData \u003d userData.stripTrailing();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" String taskType \u003d userData.substring(0, 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" int dataLength \u003d userData.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" Task taskToBeStored \u003d new Task(\"temp\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" int isDoneSymbol \u003d Integer.parseInt(userData.substring(dataLength - 1, dataLength));","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" boolean isDone \u003d isDoneSymbol \u003d\u003d 1 ? true : false;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userData.substring(1, 2).equals(\" \") || (isDoneSymbol !\u003d 1 \u0026\u0026 isDoneSymbol !\u003d 0)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d userData.substring(2, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new ToDos(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a todo task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"T (description) (1/0) where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" String descriptionWithTime \u003d userData.substring(0, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /by \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":" int startIndex \u003d matcher.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" int endIndex \u003d matcher.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d startIndex \u003e 2 ? userData.substring(2, startIndex) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":" String by \u003d userData.substring(endIndex, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException | DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a deadline task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"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":122,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"LINCHENYU2030S"},"content":" String descriptionWithTime \u003d userData.substring(0, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /from \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern1 \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher1 \u003d pattern1.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher1.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstStart \u003d matcher1.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstEnd \u003d matcher1.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex2 \u003d \"\\\\b /to \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern2 \u003d Pattern.compile(regex2);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher2 \u003d pattern2.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher2.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondStart \u003d matcher2.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondEnd \u003d matcher2.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d firstStart \u003e 2 ? userData.substring(2, firstStart) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromTime \u003d userData.substring(firstEnd, secondStart);","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"LINCHENYU2030S"},"content":" String toTime \u003d userData.substring(secondEnd, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new Event(description, fromTime, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException | DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for an event task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"E (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm (1/0) \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"LINCHENYU2030S"},"content":" \"where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"LINCHENYU2030S"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored.mark(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch(FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"../data/Alex.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException e2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"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":178,"author":{"gitId":"LINCHENYU2030S"},"content":" + e2.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" +\"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a todo task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"T (description) (1/0) where 1 indicates done and 0 indicates undone\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a deadline task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"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":191,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a event task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"E (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm (1/0)\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"LINCHENYU2030S"},"content":" \"where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":199}},{"path":"src/main/java/View.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"public enum View {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":" LISTALL,","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" LISTONEDAY","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":4}},{"path":"src/main/java/ViewCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"LINCHENYU2030S"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":"public class ViewCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" private View viewType;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" public ViewCommand(String command, View viewType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" this.viewType \u003d viewType;","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":" switch(this.viewType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" case LISTALL:","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.printAllContent();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" case LISTONEDAY:","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.printTaskForDate(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForDate();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" }","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-02"}],"authorContributionMap":{"LINCHENYU2030S":30}},{"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":"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":"public class AddCommand 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":" private Add addType;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" public AddCommand(String command, Add addType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" this.addType \u003d addType;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" switch(this.addType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" case TODO:","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!command.substring(4, 5).equals(\" \")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Please enter a todo task in the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"todo (description)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" Task todo \u003d new ToDos(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForTodo();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","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":" case DEADLINE:","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /by \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter a deadline task in the format: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" \"deadline (description) /by yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" int startIndex \u003d matcher.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" int endIndex \u003d matcher.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d startIndex \u003e 9 ? command.substring(9, startIndex) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" String by \u003d command.substring(endIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" Task deadline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(deadline);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForDeadline();","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" case EVENT:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /from \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern1 \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher1 \u003d pattern1.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher1.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstStart \u003d matcher1.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstEnd \u003d matcher1.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex2 \u003d \"\\\\b /to \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern2 \u003d Pattern.compile(regex2);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher2 \u003d pattern2.matcher(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher2.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\";","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":" int secondStart \u003d matcher2.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondEnd \u003d matcher2.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d firstStart \u003e 6 ? command.substring(6, firstStart) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromTime \u003d command.substring(firstEnd, secondStart);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" String toTime \u003d command.substring(secondEnd);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" Task event \u003d new Event(description, fromTime, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","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":" + e.getMessage() + \"\\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":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForEvent();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":109}},{"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":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" new Alex().run();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":16}},{"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":"public class AlexException extends Exception{","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" public AlexException(String message) {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" super(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"LINCHENYU2030S":9}},{"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":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" public abstract void execute();","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":5}},{"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":"public class Deadline extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" public Deadline(String description, String by) throws AlexException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedDateTime \u003d LocalDateTime.parse(by, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getBy() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.by;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getDueDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" String dateString \u003d this.by.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate date \u003d LocalDate.parse(dateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" return date;","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":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" int hour \u003d parsedDateTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" int minute \u003d parsedDateTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" Month month \u003d parsedDateTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" int day \u003d parsedDateTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" int year \u003d parsedDateTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"[D]\" + super.toString()","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" (by: \" + hour +\":\"+ minute + \" \" + day + \" \" + month + \" \" + year + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":40}},{"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":"public class EditCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" private Edit editType;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" public EditCommand(String command, Edit editType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" this.editType \u003d editType;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" switch (this.editType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" int index \u003d Integer.parseInt(command.substring(5));","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" Task targetedTask \u003d TaskList.getTaskByIndex(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" targetedTask.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForMark();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","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":" case UNMARK:","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(7));","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.unmark();","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.printAlertForUnmark();","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 DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" int toDeleteIndex \u003d Integer.parseInt(command.substring(7, 8));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.delete(toDeleteIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IndexOutOfBoundsException | NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForDelete();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" + e.getMessage() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" }","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":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":64}},{"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":"public class Event extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String fromTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String toTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedFromTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" protected LocalDateTime parsedToTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" public Event(String description, String fromTime, String toTime) throws AlexException, DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" this.fromTime \u003d fromTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" this.toTime \u003d toTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedFromTime \u003d LocalDateTime.parse(fromTime, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" this.parsedToTime \u003d LocalDateTime.parse(toTime, UserInputStorage.TIMEFORMATTER);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getFromTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.fromTime;","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":" public String getToTime() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.toTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getFromDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromDateString \u003d this.fromTime.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate fromDate \u003d LocalDate.parse(fromDateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" return fromDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" public LocalDate getToDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" String toDateString \u003d this.toTime.substring(0, 10);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate toDate \u003d LocalDate.parse(toDateString);","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" return toDate;","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":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromHour \u003d parsedFromTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromMinute \u003d parsedFromTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" Month fromMonth \u003d parsedFromTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromDay \u003d parsedFromTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" int fromYear \u003d parsedFromTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" int toHour \u003d parsedToTime.getHour();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" int toMinute \u003d parsedToTime.getMinute();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" Month toMonth \u003d parsedToTime.getMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" int toDay \u003d parsedToTime.getDayOfMonth();","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" int toYear \u003d parsedToTime.getYear();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"[E]\" + super.toString()","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" (from: \" + fromHour +\":\" + fromMinute + \" \" + fromDay + \" \" + fromMonth + \" \" + fromYear + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" to: \" + toHour + \":\" + toMinute + \" \" + toDay + \" \" + toMonth + \" \" + toYear + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":60}},{"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":"public class ExitCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" public ExitCommand(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.bye();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":14}},{"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":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" public static Command parse(String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" int commandLength \u003d command.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" Command c;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.MARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 6 \u0026\u0026 command.substring(0, 6).equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.UNMARK;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 6 \u0026\u0026 command.substring(0, 6).equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" Edit edit \u003d Edit.DELETE;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new EditCommand(command, edit);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.LISTALL;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"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":20,"author":{"gitId":"LINCHENYU2030S"},"content":" View view \u003d View.LISTONEDAY;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ViewCommand(command, view);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 4 \u0026\u0026 command.substring(0, 4).equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.TODO;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 8 \u0026\u0026 command.substring(0, 8).equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.DEADLINE;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (commandLength \u003e\u003d 5 \u0026\u0026 command.substring(0, 5).equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" Add add \u003d Add.EVENT;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new AddCommand(command, add);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (command.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new ExitCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" c \u003d new UnknownCommand(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" return c;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":38}},{"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":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" protected String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" protected boolean isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" public Task(String description) throws AlexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" description \u003d description.stripTrailing();","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" if (description.equals(\"\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The description of a task cannot be empty\";","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getStatusSymbol() {","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" if (isDone) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" return \"X\";","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" return \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" public boolean isDone() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" public void mark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Nice! I\u0027ve marked this task as done:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" + this","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(tobePrinted);","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" public void mark(boolean printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" if (printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" this.mark();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" }","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":" public void unmark() {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"OK, I\u0027ve marked this task as not done yet:\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" + this","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(tobePrinted);","lastModifiedDate":"2023-08-24"},{"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":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" String str \u003d \"[\" + this.getStatusSymbol() + \"] \" + this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" return str;","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":68}},{"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":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" private static ArrayList\u003cTask\u003e userinputs \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" private static int numberOfElements \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" public static int getNumberOfElements() {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" return numberOfElements;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void store(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements++;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Got it. I\u0027ve added this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" + task.toString() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have \" + numberOfElements + \" tasks in the list.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","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":" public static void store(Task task, boolean printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" if (printToUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":" store(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" userinputs.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements++;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" }","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":" public static Task getTaskByIndex(int index) throws AlexException {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" if (index \u003e numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! There is/are only \" + numberOfElements + \" task(s) stored\";","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (index \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Task number cannot be negative, task number starts from 0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" return userinputs.get(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAllContent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + (i + 1) + \". \" + userinputs.get(i).toString() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" + tobePrinted","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void delete(int index) throws AlexException{","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" if (index \u003e numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! There is/are only \" + numberOfElements + \" task(s) stored\";","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (index \u003c 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Task number cannot be negative, task number starts from 0\";","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" Task tobeRemoved \u003d userinputs.remove(index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" numberOfElements--;","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":" + \"Noted. I\u0027ve removed this task:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + tobeRemoved.toString() + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Now you have 4 tasks in the list.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","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":" public static void printTaskForDate(String date) throws DateTimeParseException {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd\");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" LocalDate parsedDate \u003d LocalDate.parse(date, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" String tobePrinted \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" int count \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 0; i \u003c numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d userinputs.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" if (task instanceof ToDos) {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" continue;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" if (deadline.getDueDate().equals(parsedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + count + \". \" + deadline + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" if (event.getFromDate().equals(parsedDate) || event.getToDate().equals(parsedDate)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" tobePrinted \u003d tobePrinted + count + \". \" + event + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" count++;","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":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"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":106,"author":{"gitId":"LINCHENYU2030S"},"content":" + tobePrinted","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":111}},{"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":"public class ToDos extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":" public ToDos(String description) throws AlexException {","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" String str \u003d \"[T]\" + super.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" return str;","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"LINCHENYU2030S":13}},{"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":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" public static final String horizontalLine \u003d \"_____________________________________________________________\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" private static Scanner userInputScanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void greet() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" String greeting \u003d horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Hello! I\u0027m your personal task assistant, Alex\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"What can I do for you today?\\n\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" + horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" UserInputStorage.loadUserDateFromFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" userInputScanner \u003d new Scanner(System.in);","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":" public static void bye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" String bye \u003d Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Bye bye. Hope to see you again soon!\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" UserInputStorage.storeToFile();","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":" public static String readUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInput \u003d userInputScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" String userInputStripped \u003d userInput.stripTrailing();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" return userInputStripped;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForMark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"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":35,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"mark (task number in non-negative integer)\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","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-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForUnmark() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"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":44,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"unmark (task number in non-negative integer)\\n\";","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":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" );","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":" public static void printAlertForDelete() {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"To delete a task, please use the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"delete (task number in non-negative integer)\\n\";","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":" + message","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":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForTodo() {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! Please enter a todo task in the following format:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \" + \"todo (description)\";","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"LINCHENYU2030S"},"content":" + message + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"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"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter a deadline task in the format: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" \"deadline (description) /by yyyy-MM-dd HHmm\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","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":" public static void printAlertForEvent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"Please enter an event task in the format: \"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"event (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForDate() {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"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":90,"author":{"gitId":"LINCHENYU2030S"},"content":" \"in the format yyyy-MM-dd only.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Please also ensure that your key in date is a valid date\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"Note that it is case sensitive\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printAlertForUnknown() {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"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":102,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" + message","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" + Ui.horizontalLine","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" );","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":108}},{"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":"public class UnknownCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"LINCHENYU2030S"},"content":" public UnknownCommand (String command) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForUnknown();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":14}},{"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":"public class UserInputStorage {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" public static final DateTimeFormatter TIMEFORMATTER \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void printFileContent() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"../data/Alex.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userDataFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.getParentFile().mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" Scanner userDataScanner \u003d new Scanner(userDataFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" while (userDataScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" String userData \u003d userDataScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(userData);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void storeToFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"LINCHENYU2030S"},"content":" FileWriter fw \u003d new FileWriter(\"../data/Alex.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"LINCHENYU2030S"},"content":" int numberOfElements \u003d TaskList.getNumberOfElements();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"LINCHENYU2030S"},"content":" for (int i \u003d 1; i \u003c\u003d numberOfElements; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"LINCHENYU2030S"},"content":" Task task \u003d TaskList.getTaskByIndex(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"LINCHENYU2030S"},"content":" String taskInfo \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"LINCHENYU2030S"},"content":" if (task instanceof ToDos) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"T \" + task.getDescription() + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"LINCHENYU2030S"},"content":" Deadline deadline \u003d (Deadline) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"D \" + deadline.getDescription() + \" /by \" + deadline.getBy()","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"LINCHENYU2030S"},"content":" + (task.isDone() ? \" 1\" : \" 0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (task instanceof Event) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"LINCHENYU2030S"},"content":" Event event \u003d (Event) task;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"LINCHENYU2030S"},"content":" taskInfo \u003d \"E \" + event.getDescription() + \" /from \" + event.getFromTime() + \" /to \"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"LINCHENYU2030S"},"content":" + event.getToTime() + (task.isDone() ? \" 1\" : \" 0\");","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":" if (i \u003d\u003d numberOfElements) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.write(taskInfo);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.write(taskInfo + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"LINCHENYU2030S"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(\"User data is successfully stored\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException | AlexException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(\"Something went wrong when saving users data to Alex.txt: \" + e.getMessage());","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-02"},{"lineNumber":65,"author":{"gitId":"LINCHENYU2030S"},"content":" public static void loadUserDateFromFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"../data/Alex.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userDataFile.getParentFile().exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.getParentFile().mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"LINCHENYU2030S"},"content":" Scanner userDataScanner \u003d new Scanner(userDataFile);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"LINCHENYU2030S"},"content":" while (userDataScanner.hasNextLine()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"LINCHENYU2030S"},"content":" String userData \u003d userDataScanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"LINCHENYU2030S"},"content":" userData \u003d userData.stripTrailing();","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"LINCHENYU2030S"},"content":" String taskType \u003d userData.substring(0, 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"LINCHENYU2030S"},"content":" int dataLength \u003d userData.length();","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"LINCHENYU2030S"},"content":" Task taskToBeStored \u003d new Task(\"temp\");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"LINCHENYU2030S"},"content":" int isDoneSymbol \u003d Integer.parseInt(userData.substring(dataLength - 1, dataLength));","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"LINCHENYU2030S"},"content":" boolean isDone \u003d isDoneSymbol \u003d\u003d 1 ? true : false;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!userData.substring(1, 2).equals(\" \") || (isDoneSymbol !\u003d 1 \u0026\u0026 isDoneSymbol !\u003d 0)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"LINCHENYU2030S"},"content":" if (taskType.equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d userData.substring(2, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new ToDos(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a todo task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"T (description) (1/0) where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (taskType.equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"LINCHENYU2030S"},"content":" String descriptionWithTime \u003d userData.substring(0, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /by \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher \u003d pattern.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"LINCHENYU2030S"},"content":" int startIndex \u003d matcher.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"LINCHENYU2030S"},"content":" int endIndex \u003d matcher.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d startIndex \u003e 2 ? userData.substring(2, startIndex) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"LINCHENYU2030S"},"content":" String by \u003d userData.substring(endIndex, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException | DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a deadline task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"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":122,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"LINCHENYU2030S"},"content":" } else if (taskType.equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"LINCHENYU2030S"},"content":" String descriptionWithTime \u003d userData.substring(0, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex \u003d \"\\\\b /from \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern1 \u003d Pattern.compile(regex);","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher1 \u003d pattern1.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher1.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstStart \u003d matcher1.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"LINCHENYU2030S"},"content":" int firstEnd \u003d matcher1.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"LINCHENYU2030S"},"content":" String regex2 \u003d \"\\\\b /to \\\\b\";","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"LINCHENYU2030S"},"content":" Pattern pattern2 \u003d Pattern.compile(regex2);","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"LINCHENYU2030S"},"content":" Matcher matcher2 \u003d pattern2.matcher(descriptionWithTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"LINCHENYU2030S"},"content":" if (!matcher2.find()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondStart \u003d matcher2.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"LINCHENYU2030S"},"content":" int secondEnd \u003d matcher2.end();","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"LINCHENYU2030S"},"content":" String description \u003d firstStart \u003e 2 ? userData.substring(2, firstStart) : \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"LINCHENYU2030S"},"content":" String fromTime \u003d userData.substring(firstEnd, secondStart);","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"LINCHENYU2030S"},"content":" String toTime \u003d userData.substring(secondEnd, dataLength - 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored \u003d new Event(description, fromTime, toTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.store(taskToBeStored, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | IndexOutOfBoundsException | DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" + \"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for an event task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"E (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm (1/0) \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"LINCHENYU2030S"},"content":" \"where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"LINCHENYU2030S"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"LINCHENYU2030S"},"content":" throw new AlexException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"LINCHENYU2030S"},"content":" if (isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"LINCHENYU2030S"},"content":" taskToBeStored.mark(false);","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch(FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"LINCHENYU2030S"},"content":" File userDataFile \u003d new File(\"../data/Alex.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"LINCHENYU2030S"},"content":" userDataFile.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (IOException e2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"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":178,"author":{"gitId":"LINCHENYU2030S"},"content":" + e2.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (AlexException | NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"LINCHENYU2030S"},"content":" String message \u003d \"OOPS!!! The program terminates because the data format at line \"","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"LINCHENYU2030S"},"content":" + (TaskList.getNumberOfElements() + 1)","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"is wrong\" +\"\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a todo task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"T (description) (1/0) where 1 indicates done and 0 indicates undone\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a deadline task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"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":191,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"The correct data format for a event task should be: \\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"LINCHENYU2030S"},"content":" + \" \"","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"LINCHENYU2030S"},"content":" + \"E (description) /from yyyy-MM-dd HHmm /to yyyy-MM-dd HHmm (1/0)\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"LINCHENYU2030S"},"content":" \"where 1 indicates done and 0 indicates undone\";","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"LINCHENYU2030S"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"LINCHENYU2030S"},"content":" System.exit(0);","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"LINCHENYU2030S":199}},{"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-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":6}},{"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":"public class ViewCommand extends Command{","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"LINCHENYU2030S"},"content":" private String command;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"LINCHENYU2030S"},"content":" private View viewType;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"LINCHENYU2030S"},"content":" public ViewCommand(String command, View viewType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"LINCHENYU2030S"},"content":" this.command \u003d command;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"LINCHENYU2030S"},"content":" this.viewType \u003d viewType;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"LINCHENYU2030S"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"LINCHENYU2030S"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"LINCHENYU2030S"},"content":" public void execute() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"LINCHENYU2030S"},"content":" switch(this.viewType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"LINCHENYU2030S"},"content":" case LISTALL:","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.printAllContent();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"LINCHENYU2030S"},"content":" case LISTONEDAY:","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"LINCHENYU2030S"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"LINCHENYU2030S"},"content":" TaskList.printTaskForDate(command);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"LINCHENYU2030S"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"LINCHENYU2030S"},"content":" Ui.printAlertForDate();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"LINCHENYU2030S"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"LINCHENYU2030S"},"content":" break;","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-02"},{"lineNumber":31,"author":{"gitId":"LINCHENYU2030S"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"LINCHENYU2030S"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"LINCHENYU2030S":32}},{"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 92ae7c77..048e1a1d 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}}}]}]},"authorFileTypeContributionMap":{"LINCHENYU2030S":{"java":887,"md":0,"fxml":0,"sh":4,"bat":0,"gradle":0,"txt":11}},"authorContributionVariance":{"LINCHENYU2030S":128596.875},"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":{}}]}]},"authorFileTypeContributionMap":{"LINCHENYU2030S":{"java":919,"md":0,"fxml":0,"sh":4,"bat":0,"gradle":0,"txt":11}},"authorContributionVariance":{"LINCHENYU2030S":121485.78},"authorDisplayNameMap":{"LINCHENYU2030S":"CS2103T-W13-2 LIN ..ENYU"}} diff --git a/PetrichorPrecipice_ip_master/authorship.json b/PetrichorPrecipice_ip_master/authorship.json index 394be701..8049718a 100644 --- a/PetrichorPrecipice_ip_master/authorship.json +++ b/PetrichorPrecipice_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke project template","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11, update Intellij to the most recent version.","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"1. Open Intellij (if you are not in the welcome screen, click `FileHandler` \u003e `Close Project` to close the existing project first)","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Open the project into Intellij as follows:","lastModifiedDate":"2021-01-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":" 1. Click `Open`.","lastModifiedDate":"2021-01-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":" 1. Select the project directory, and click `OK`.","lastModifiedDate":"2021-01-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" 1. If there are any further prompts, accept the defaults.","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"1. Configure the project to use **JDK 11** (not other versions) as explained in [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk).\u003cbr\u003e","lastModifiedDate":"2021-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":" In the same dialog, set the **Project language level** field to the `SDK default` option.","lastModifiedDate":"2021-07-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"3. After that, locate the `src/main/java/Duke.java` file, right-click it, and choose `Run Duke.main()` (if the code editor is showing compile errors, try restarting the IDE). If the setup is correct, you should see something like the below as the output:","lastModifiedDate":"2021-07-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" Hello from","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" ____ _ ","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" | _ \\ _ _| | _____ ","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" | | | | | | | |/ / _ \\","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" | |_| | |_| | \u003c __/","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" |____/ \\__,_|_|\\_\\___|","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":23,"PetrichorPrecipice":1}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" mainClass \u003d \"alpha.Alpha\"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" archiveBaseName \u003d \"alpha\"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" archiveFileName \u003d \"alpha.jar\"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":40,"PetrichorPrecipice":3}},{"path":"src/main/java/alpha/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" private Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public AddCommand(TaskList taskList, FileHandler fh, UI ui, Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fh, ui);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.saveToFile(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.taskAdded(task, taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":21}},{"path":"src/main/java/alpha/Alpha.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * The Chatbot Alpha is capable of tracking, marking, listing, and deleting events, to-dos, and deadlines.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" * It responds to commands like \"event,\" \"meeting,\" \"deadline,\" \"list,\" \"mark,\" \"unmark,\" and \"delete.\"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" * To end the Chatbot, type \"bye.\"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"public class Alpha {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" private UI ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private FileHandler fileHandler;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for the Alpha class. It reads existing tasks from \"data/alpha.txt\" and adds them to the taskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" public Alpha() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler \u003d new FileHandler();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList \u003d fileHandler.readFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" parser \u003d new Parser(fileHandler, taskList, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.checkAndCreate();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" * Starts the Alpha ChatBot. Ends when \"bye\" is input.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.introduce();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" String input \u003d ui.read();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" command.execute();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.goodbye();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" * This is the main method that calls the run() function and starts Chatbot Alpha.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param args Unused.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" new Alpha().run();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":2,"PetrichorPrecipice":49}},{"path":"src/main/java/alpha/AlphaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * A class to handle exceptions related to ChatBot Alpha.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public abstract class AlphaException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" public AlphaException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":11}},{"path":"src/main/java/alpha/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of an abstract Command. All other Commands inherit from this class.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" * Commands modify the task list in some way.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" protected TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" protected FileHandler fileHandler;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" protected UI ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" protected boolean isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for the Command class.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param taskList The taskList that the command will modify.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param fileHandler The fileHandler that the command will modify.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param ui The user interface the command interacts with.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command(TaskList taskList, FileHandler fileHandler, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" this.fileHandler \u003d fileHandler;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" public abstract void execute();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" return isExit;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":34}},{"path":"src/main/java/alpha/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of a deadline which has an ending time.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalDate dateBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalTime timeBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" private Deadline(String description, LocalDate dateBy) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description.trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" this.dateBy \u003d dateBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" private Deadline(String description, LocalDate dateBy, LocalTime timeBy) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description.trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" this.dateBy \u003d dateBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" this.timeBy \u003d timeBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" public static Deadline makeDeadline(String description, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedDescription \u003d description.trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedBy \u003d by.trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" if (trimmedDescription.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidFormatException(\"Missing a description.\", TaskException.TaskType.DEADLINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitBy \u003d trimmedBy.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitBy.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Deadline(trimmedDescription, LocalDate.parse(splitBy[0]),","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" LocalTime.parse(splitBy[1], DateTimeFormatter.ofPattern(\"HHmm\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Deadline(trimmedDescription, LocalDate.parse(splitBy[0]));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"The date is in an invalid format! Enter the date in the format YYYY-MM-DD\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidFormatException e2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e2.getMessage() + \" Please enter a description before the timing of the deadline.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getDateBy() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" return dateBy.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getTimeBy() {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" if (timeBy !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" return timeBy.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" if (timeBy !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dateBy.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) +","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" \" \" + timeBy.format(DateTimeFormatter.ofPattern(\"HH:mm\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dateBy.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":68}},{"path":"src/main/java/alpha/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" private int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public DeleteCommand(TaskList taskList, FileHandler fileHandler, UI ui, int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.delete(taskList.delete(index), taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.delete(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":18}},{"path":"src/main/java/alpha/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of an event which has both a start and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalDate startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalDate endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalTime startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalTime endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private Event(String description, LocalDate startDate, LocalTime startTime, LocalDate endDate, LocalTime endTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" private Event(String description, LocalDate startDate, LocalDate endDate, LocalTime endTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" private Event(String description, LocalDate startDate, LocalTime startTime, LocalDate endDate) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" private Event(String description, LocalDate startDate, LocalDate endDate) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" public static Event makeEvent(String description, String start, String end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedDescription \u003d description.trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedStart \u003d start.trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedEnd \u003d end.trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitStart \u003d trimmedStart.split(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitEnd \u003d trimmedEnd.split(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" if (trimmedDescription.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidFormatException(\"Missing a description!\", TaskException.TaskType.EVENT);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitStart.length \u003d\u003d 2 \u0026\u0026 splitEnd.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Event(trimmedDescription, LocalDate.parse(splitStart[0]), LocalTime.parse(splitStart[1],","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" DateTimeFormatter.ofPattern(\"HHmm\")), LocalDate.parse(splitEnd[0]),","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" LocalTime.parse(splitEnd[1], DateTimeFormatter.ofPattern(\"HHmm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitStart.length \u003d\u003d 2 \u0026\u0026 splitEnd.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Event(trimmedDescription, LocalDate.parse(splitStart[0]), LocalTime.parse(splitStart[1],","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" DateTimeFormatter.ofPattern(\"HHmm\")), LocalDate.parse(splitEnd[0]));","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitStart.length \u003d\u003d 1 \u0026\u0026 splitEnd.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Event(trimmedDescription, LocalDate.parse(splitStart[0]), LocalDate.parse(splitEnd[0]),","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" LocalTime.parse(splitEnd[1], DateTimeFormatter.ofPattern(\"HHmm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitStart.length \u003d\u003d 1 \u0026\u0026 splitEnd.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Event(trimmedDescription, LocalDate.parse(splitStart[0]), LocalDate.parse(splitEnd[0]));","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"The date/time is in an invalid format! Enter\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":" \" the date in the format YYYY-MM-DD HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidFormatException e2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e2.getMessage() + \" Please enter a description between \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" \"the start and end timings of the event.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getStart() {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" return startDate.toString() + getStartTime();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getEnd() {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" return endDate.toString() + getEndTime();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" private String getStartTime() {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" if (startTime !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" return \" \" + startTime.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":" private String getEndTime() {","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"PetrichorPrecipice"},"content":" if (endTime !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"PetrichorPrecipice"},"content":" return \" \" + endTime.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"PetrichorPrecipice"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"PetrichorPrecipice"},"content":" String output \u003d \"[E]\" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"PetrichorPrecipice"},"content":" String startDate \u003d \" (from: \" + this.startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"PetrichorPrecipice"},"content":" String startTime \u003d (this.startTime !\u003d null) ? \" \" + this.startTime.format(DateTimeFormatter.ofPattern(\"HH:mm\")) : \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"PetrichorPrecipice"},"content":" String endDate \u003d \" to: \" + this.endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"PetrichorPrecipice"},"content":" String endTime \u003d (this.endTime !\u003d null) ? \" \" + this.endTime.format(DateTimeFormatter.ofPattern(\"HH:mm\")) + \")\" : \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"PetrichorPrecipice"},"content":" return output + startDate + startTime + endDate + endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":113}},{"path":"src/main/java/alpha/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" public ExitCommand(TaskList taskList, FileHandler fileHandler, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" // No need to do anything here for an ExitCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":14}},{"path":"src/main/java/alpha/FileHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class that handles creating the file, reading from the file, storing tasks to the file and updating the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":"public class FileHandler {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private boolean isCreated \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" private File alphaTxt \u003d new File(new File(System.getProperty(\"user.dir\")) +","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" File.separator + \"data\" + File.separator + \"alpha.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" private FileWriter writer;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" private BufferedReader reader;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" public FileHandler() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" * Checks for the existence of the data/alpha.txt file. Creates it if it does not exist.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" public void checkAndCreate() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" boolean directoryExists \u003d java.nio.file.Files.exists(java.nio.file.Paths.get(\"data\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" // Check if the file exists","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" boolean dataExists \u003d java.nio.file.Files.exists(java.nio.file.Paths.get(\"data\", \"alpha.txt\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" if (!directoryExists) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" new File(\"data\").mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" isCreated \u003d alphaTxt.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (!dataExists) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" isCreated \u003d alphaTxt.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"There was a problem reading data from the file.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" * Checks if the file is created or not. If not, it reads any tasks from the file and adds them to the current","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" * task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a new task list with tasks from the file added.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskList readFromFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" if (isCreated) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" Scanner sc \u003d new Scanner(alphaTxt);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" String type \u003d splitInput[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" String checked \u003d splitInput[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" String description \u003d splitInput[2].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" if (type.equals(\"T \")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" task \u003d ToDo.createToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (type.equals(\"D \")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" task \u003d Deadline.makeDeadline(description, splitInput[3]);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" task \u003d Event.makeEvent(description, splitInput[3], splitInput[4]);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":" if (checked.equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"The file could not be found\");","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" * Saves a task to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task The task to add to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" // Saves Task to file whenever a Task is added","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" public void saveToFile(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" writer \u003d new FileWriter(alphaTxt, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" if (alphaTxt.length() !\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"PetrichorPrecipice"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(\"D |\" + task.getStatusIcon() + \"| \" + task.getDescription() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"PetrichorPrecipice"},"content":" + ((Deadline) task).getDateBy() + \" \" + ((Deadline) task).getTimeBy());","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (task instanceof ToDo) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(\"T |\" + task.getStatusIcon() + \"| \" + task.getDescription());","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(\"E |\" + task.getStatusIcon() + \"| \" + task.getDescription() + \" | \" + ((Event) task).getStart()","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"PetrichorPrecipice"},"content":" + \" | \" + ((Event) task).getEnd());","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"I/O Exception\");","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"PetrichorPrecipice"},"content":" * Checks or unchecks a task in the file depending on the second boolean parameter.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index The index of the task to be marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param check Boolean of whether the task is to be checked or unchecked.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"PetrichorPrecipice"},"content":" // Checks or unchecks a task in the file. Does so by creating a temp file that copies everything over","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"PetrichorPrecipice"},"content":" // except the task that is being checked/unchecked.","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"PetrichorPrecipice"},"content":" public void checkOrUncheck(int index, boolean check) {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"PetrichorPrecipice"},"content":" int temp_index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"PetrichorPrecipice"},"content":" File temp \u003d File.createTempFile(\"file\", \".txt\", alphaTxt.getParentFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"PetrichorPrecipice"},"content":" writer \u003d new FileWriter(temp, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"PetrichorPrecipice"},"content":" reader \u003d new BufferedReader(new FileReader(alphaTxt));","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"PetrichorPrecipice"},"content":" String curr \u003d reader.readLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"PetrichorPrecipice"},"content":" while (temp_index \u003e 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(curr);","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"PetrichorPrecipice"},"content":" temp_index--;","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"PetrichorPrecipice"},"content":" curr \u003d reader.readLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] currSplit \u003d curr.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"PetrichorPrecipice"},"content":" if (check) {","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"PetrichorPrecipice"},"content":" currSplit[1] \u003d \"X\";","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"PetrichorPrecipice"},"content":" currSplit[1] \u003d \" \";","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"PetrichorPrecipice"},"content":" curr \u003d String.join(\"|\", currSplit);","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(curr);","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"PetrichorPrecipice"},"content":" while ((curr \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(curr);","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"PetrichorPrecipice"},"content":" reader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"PetrichorPrecipice"},"content":" alphaTxt.delete();","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"PetrichorPrecipice"},"content":" temp.renameTo(alphaTxt);","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"There was an issue!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"PetrichorPrecipice"},"content":" * Deletes a task from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index Index of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"PetrichorPrecipice"},"content":" // Deletes a task by creating a temp file and copying everything but the deleted task over.","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"PetrichorPrecipice"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"PetrichorPrecipice"},"content":" int temp_index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"PetrichorPrecipice"},"content":" File temp \u003d File.createTempFile(\"file\", \".txt\", alphaTxt.getParentFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"PetrichorPrecipice"},"content":" writer \u003d new FileWriter(temp, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"PetrichorPrecipice"},"content":" reader \u003d new BufferedReader(new FileReader(alphaTxt));","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"PetrichorPrecipice"},"content":" String curr;","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"PetrichorPrecipice"},"content":" while ((curr \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"PetrichorPrecipice"},"content":" if (temp_index \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"PetrichorPrecipice"},"content":" temp_index--;","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"PetrichorPrecipice"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"PetrichorPrecipice"},"content":" if (temp_index !\u003d index \u0026\u0026 index !\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(curr);","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"PetrichorPrecipice"},"content":" temp_index--;","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"PetrichorPrecipice"},"content":" reader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"PetrichorPrecipice"},"content":" alphaTxt.delete();","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"PetrichorPrecipice"},"content":" temp.renameTo(alphaTxt);","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"There was an error!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"PetrichorPrecipice":190}},{"path":"src/main/java/alpha/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" private final String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" public FindCommand(TaskList taskList, FileHandler fh, UI ui, String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fh, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" this.input \u003d input.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" TaskList newList \u003d taskList.search(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.list(newList);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"PetrichorPrecipice":18}},{"path":"src/main/java/alpha/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" public InvalidCommand(TaskList taskList, FileHandler fileHandler, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" // Nothing to execute for an invalid command","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":14}},{"path":"src/main/java/alpha/InvalidFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when a task is input with an invalid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class InvalidFormatException extends TaskException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" public InvalidFormatException(String errorMessage, TaskType task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":11}},{"path":"src/main/java/alpha/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when using an invalid index to mark, delete, or unmark a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class InvalidIndexException extends AlphaException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public InvalidIndexException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":10}},{"path":"src/main/java/alpha/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when an input is not recognized.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class InvalidInputException extends AlphaException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public InvalidInputException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":10}},{"path":"src/main/java/alpha/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" public ListCommand(TaskList taskList, FileHandler fileHandler, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.list(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":14}},{"path":"src/main/java/alpha/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" private int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public MarkCommand(TaskList taskList, FileHandler fileHandler, UI ui, int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.mark(taskList.mark(index));","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.checkOrUncheck(index, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":18}},{"path":"src/main/java/alpha/MissingIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when using a missing index to mark, delete, or unmark a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class MissingIndexException extends AlphaException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public MissingIndexException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":10}},{"path":"src/main/java/alpha/MissingInfoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when a task is inputted with missing information.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class MissingInfoException extends TaskException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" public MissingInfoException(String errorMessage, TaskType task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":11}},{"path":"src/main/java/alpha/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class that handles the user\u0027s inputs and makes sense of them. Uses certain key phrases for different commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String END \u003d \"bye\";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String LIST \u003d \"list\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String CHECK \u003d \"mark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String UNCHECK \u003d \"unmark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String TODO \u003d \"todo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String EVENT \u003d \"event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String FIND \u003d \"find\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" private FileHandler fileHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" private UI ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for the class Parser.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param fileHandler FileHandler to write to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param taskList TaskList to add tasks to.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param ui User Interface to output responses for Alpha.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" public Parser(FileHandler fileHandler, TaskList taskList, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" this.fileHandler \u003d fileHandler;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a command based on the user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param input User input to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return Command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \"); // Splits string to check for \"mark\" or \"unmark\"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" if (input.equals(LIST)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" return this.list();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(CHECK)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" return check(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(UNCHECK)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" return uncheck(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(DEADLINE)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" return addDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(EVENT)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" return addEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(TODO)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" return addToDo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (input.equals(TODO)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" return delete(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (input.equals(END)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" return new ExitCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(DELETE)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" return delete(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(FIND)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" return find(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidInputException(\"Invalid Input!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (MissingIndexException e1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e1.getMessage() + \" Please enter the index of the number you would like to mark.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidIndexException e2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e2.getMessage() + \" Please enter a valid index. To check all valid indices, \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":" \"type \\\"list\\\" and press ENTER\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidInputException e3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e3.getMessage() + \" Please input something meaningful.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (NumberFormatException e4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"Please enter a number.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidFormatException | MissingInfoException e5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" if (e5.getTask() \u003d\u003d TaskException.TaskType.TODO) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e5.getMessage() + \" Please enter a todo in the \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":" \"format \\\"todo YOUR_DESCRIPTION\\\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (e5.getTask() \u003d\u003d TaskException.TaskType.DEADLINE) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e5.getMessage() + \" Please enter a deadline in the format \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":" \"\\\"deadline YOUR_DESCRIPTION /by YOUR_TIME\\\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (e5.getTask() \u003d\u003d TaskException.TaskType.EVENT) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e5.getMessage() + \" Please enter an event in the format \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" \"\\\"event YOUR_DESCRIPTION \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" \"/from START_TIME /to END_TIME\\\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a list command.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return Command that lists all the stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command list() {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PetrichorPrecipice"},"content":" return new ListCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that adds an event based on an input.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that adds an event.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingInfoException If length of splitInput \u003c 3","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws InvalidFormatException If /from and /to are not found within the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command addEvent(String input) throws MissingInfoException, InvalidFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingInfoException(\"Missing Information!\", TaskException.TaskType.EVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitEvent \u003d input.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitEvent[1].startsWith(\"from\") \u0026\u0026 splitEvent[2].startsWith(\"to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PetrichorPrecipice"},"content":" Event event \u003d Event.makeEvent(splitEvent[0].substring(6),","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PetrichorPrecipice"},"content":" splitEvent[1].substring(5),","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PetrichorPrecipice"},"content":" splitEvent[2].substring(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PetrichorPrecipice"},"content":" return new AddCommand(taskList, fileHandler, ui, event);","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidFormatException(\"Invalid Format!\", TaskException.TaskType.EVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that adds a ToDo based on an input.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that adds a ToDo.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingInfoException If length of splitInput \u003d\u003d 1","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command addToDo(String input) throws MissingInfoException {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingInfoException(\"Missing Information!\", TaskException.TaskType.TODO);","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PetrichorPrecipice"},"content":" ToDo todo \u003d ToDo.createToDo(input.substring(5));","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"PetrichorPrecipice"},"content":" return new AddCommand(taskList, fileHandler, ui, todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that adds a deadline based on an input.","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that adds a ToDo.","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingInfoException If length of splitInput \u003d\u003d 1","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command addDeadline(String input) throws MissingInfoException, InvalidFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingInfoException(\"Missing Information!\", TaskException.TaskType.DEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (input.split(\"/by\").length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidFormatException(\"Invalid Format!\", TaskException.TaskType.DEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitDeadline \u003d input.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"PetrichorPrecipice"},"content":" Deadline deadline \u003d Deadline.makeDeadline(splitDeadline[0].substring(9),","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"PetrichorPrecipice"},"content":" splitDeadline[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"PetrichorPrecipice"},"content":" return new AddCommand(taskList, fileHandler, ui, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that deletes a task from storage based on an input.","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that deletes a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingIndexException if the index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws InvalidIndexException if the index exceeds or is lesser than the number of stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command delete(String input) throws MissingIndexException, InvalidIndexException {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingIndexException(\"Missing Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (Integer.parseInt(splitInput[1]) \u003e taskList.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidIndexException(\"Invalid Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"PetrichorPrecipice"},"content":" return new DeleteCommand(taskList, fileHandler, ui, Integer.parseInt(splitInput[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that checks a task based on an index.","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that checks a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingIndexException if the index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws InvalidIndexException if the index exceeds or is lesser than the number of stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command check(String input) throws MissingIndexException, InvalidIndexException {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingIndexException(\"Missing Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (Integer.parseInt(splitInput[1]) \u003e taskList.size() || splitInput.length \u003e 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidIndexException(\"Invalid Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"PetrichorPrecipice"},"content":" return new MarkCommand(taskList, fileHandler, ui, Integer.parseInt(splitInput[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that unchecks a task based on an index.","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that unchecks a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingIndexException if the index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws InvalidIndexException if the index exceeds or is lesser than the number of stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command uncheck(String input) throws MissingIndexException, InvalidIndexException {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingIndexException(\"Missing Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (Integer.parseInt(splitInput[1]) \u003e taskList.size() || splitInput.length \u003e 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidIndexException(\"Invalid Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"PetrichorPrecipice"},"content":" return new UnmarkCommand(taskList, fileHandler, ui, Integer.parseInt(splitInput[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command find(String input) throws MissingIndexException {","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingIndexException(\"Missing Index!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"PetrichorPrecipice"},"content":" splitInput[0] \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"PetrichorPrecipice"},"content":" return new FindCommand(taskList, fileHandler, ui, String.join(\" \", splitInput));","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PetrichorPrecipice":230}},{"path":"src/main/java/alpha/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" private String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for Task class. Sets isDone to false since tasks are entered unchecked.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" return description;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the marked/unmarked status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return \"X\" if marked, \" \" if not.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" return isDone ? \"X\" : \" \"; // Mark task done with X","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" public void mark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" public void unmark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the String representation of a task, including its marked status and description.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return String representation of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"[\" + getStatusIcon() + \"] \" + getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":64}},{"path":"src/main/java/alpha/TaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class to handle exceptions related to entering tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public abstract class TaskException extends AlphaException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * Enumeration of task types.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" DEADLINE,","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" TODO,","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" EVENT","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" private TaskType task;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for TaskException class.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param errorMessage The error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task The type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskException(String errorMessage, TaskType task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" * Return the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskType getTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":38}},{"path":"src/main/java/alpha/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class that stores the current list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for TaskList class. Creates a new ArrayList.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskList() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the current size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return the current size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" public int size() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList.size();","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" * Adds a task to the current task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param i The index of the returned task.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" * Marks a task at the given index and returns it.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index The index of the marked and returned task.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The marked task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" Task curr \u003d getTask(index - 1); // Decrement by 1 to match display index","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" curr.mark();","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" return curr;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" * Unmarks a task at the given index and returns it.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index The index of the unmarked and returned task.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The unmarked task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" Task curr \u003d getTask(index - 1); // Decrement by 1 to match display index","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" curr.unmark();","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" return curr;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" * Deletes a task at the given index and returns it.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index The index of the deleted and returned task.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The deleted task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task delete(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":" Task curr \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList.remove(index - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" return curr;","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskList search(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":" TaskList newList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" Task curr \u003d taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" if (curr.getDescription().toUpperCase().contains(input.toUpperCase())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" newList.add(curr);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" return newList;","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":97}},{"path":"src/main/java/alpha/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of a ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * Creates a ToDo instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return A new ToDo instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public static ToDo createToDo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" return new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private ToDo(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description.trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":26}},{"path":"src/main/java/alpha/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class that handles ChatBot Alpha\u0027s inputs and outputs with the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" * Author: Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"public class UI {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" private static final String LINE_SEPARATOR \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private String intro \u003d LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" \" Hello! I\u0027m Alpha\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" \" What can I do for you?\\n\" + LINE_SEPARATOR;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" // Outro message","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private String end \u003d LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" LINE_SEPARATOR;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" public UI() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs Chatbot Alpha\u0027s Introduction message.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" public void introduce() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(intro);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs Chatbot Alpha\u0027s Goodbye message.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" public void goodbye() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(end);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a message to inform the user that a task was added.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task Task that is being added.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param size Current size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" public void taskAdded(Task task, int size) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Alright! I\u0027ve added this task:\\n \" + \" \" + task","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" + \"\\nNow you have \" + size + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a message to tell the user a task has been marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task Task that is being marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" public void mark(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Nice! I\u0027ve marked this task as done:\\n\" + \" \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" task +","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" \"\\n\" + LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a message to tell the user a task has been unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task Task that is being unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" public void unmark(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Cool! I\u0027ve marked this task as not done yet:\\n\" + \" \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" task +","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":" \"\\n\" + LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a message to tell the user a task has been deleted and the size of the remaining list.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task Task that is being marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param size Remaining size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" public void delete(Task task, int size) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Noted. I\u0027ve removed this task:\\n\" + \" \" + task + \"\\n Now You have \" + size +","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":" \" tasks in the list.\" + \"\\n\" + LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a display of the current list.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param taskList Current taskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" public void list(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" int size \u003d taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":" if (size \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" + \"There are no tasks in your list.\" + \"\\n\" + LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"PetrichorPrecipice"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"PetrichorPrecipice"},"content":" int plusOne \u003d i + 1; // Increment by one so starting display index is 1","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(plusOne + \". \" + taskList.getTask(i));","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the current user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return the current user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"PetrichorPrecipice"},"content":" public String read() {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"PetrichorPrecipice"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"PetrichorPrecipice"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":118}},{"path":"src/main/java/alpha/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public UnmarkCommand(TaskList taskList, FileHandler fh, UI ui, int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fh, ui);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" Task unmarkedTask \u003d taskList.unmark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.unmark(unmarkedTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.checkOrUncheck(index, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":19}},{"path":"src/test/java/alpha/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" public void makeEvent_invalidDate_dateTimeParse_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" Event.makeEvent(\"meeting\", \"2022-15-01\", \"2022-20-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"The date/time is in an invalid format! Enter the date in the format YYYY-MM-DD HHmm\\n\",","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" public void makeEvent_invalidTime_dateTimeParse_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" Event.makeEvent(\"meeting\", \"2022-01-01 2500\", \"2022-01-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"The date/time is in an invalid format! Enter the date in the format YYYY-MM-DD HHmm\\n\",","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" public void makeEvent_missingDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" Event.makeEvent(\" \", \"2022-01-01\", \"2022-01-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"Missing a description! Please enter a description between \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" \"the start and end timings of the event.\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PetrichorPrecipice":42}},{"path":"src/test/java/alpha/ParseTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"public class ParseTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" private Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" public void addDeadline_invalidFormat_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" parser \u003d new Parser(new FileHandler(), new TaskList(), new UI());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(Deadline.makeDeadline(\".\", \"2022-10-12 1200\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" (parser.addDeadline(\"deadline meeting /by\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"Invalid Format!\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" public void addEvent_invalidFormat_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" parser \u003d new Parser(new FileHandler(), new TaskList(), new UI());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"0\", parser.addEvent(\"event meeting /fro 2022-10-10 1200 /to 2022-10-10\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"Invalid Format!\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" public void addEvent_missingInfo_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" parser \u003d new Parser(new FileHandler(), new TaskList(), new UI());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(Event.makeEvent(\".\", \" \", \" \"), (parser.addEvent(\"event meeting\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"Missing Information!\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PetrichorPrecipice":46}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"eat","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"todo sleep","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"deadline work /by 5 pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"event meeting /from 6pm /to 8pm","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":10}},{"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":"PetrichorPrecipice"},"content":"java -classpath ../bin Alpha \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":{"-":37,"PetrichorPrecipice":1}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"# **Alpha**","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"Alpha is a Chatbot I made with my very limited programming skills. It currently is: ","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"- Purely text-based","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"- Probably disappointed at how poorly I made it","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"- ~~Functional~~ Usable","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"Here\u0027s how I developed Alpha:","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"1. Bid for CS2103T","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"2. Appeal for CS2103T","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":"3. Spend like a solid 10 hours weekly constantly changing the code","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":"4. And it is finally **done**. (Until next week :sob:)","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":"Features include:","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":"- [x] These fancy checkbox thingies that you cannot click on. ","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":"You can go [here](https://github.com/nus-cs2103-AY2324S1/ip) to view Alpha\u0027s predecessor (even though Alpha should really be the first). ","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":"The code I am proudest of in Alpha:","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":"private static String TODO \u003d \"todo\";","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"-"},"content":"```","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":"And, last but not least:","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":"\u003e \"Bye.\" - Chatbot Alpha","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"-":6,"PetrichorPrecipice":23}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"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":"PetrichorPrecipice"},"content":" mainClass \u003d \"alpha.Alpha\"","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" archiveBaseName \u003d \"alpha\"","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" archiveFileName \u003d \"alpha.jar\"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"-":40,"PetrichorPrecipice":3}},{"path":"src/main/java/alpha/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" private Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public AddCommand(TaskList taskList, FileHandler fh, UI ui, Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fh, ui);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" if (task !\u003d null) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.saveToFile(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.taskAdded(task, taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":21}},{"path":"src/main/java/alpha/Alpha.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * The Chatbot Alpha is capable of tracking, marking, listing, and deleting events, to-dos, and deadlines.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" * It responds to commands like \"event,\" \"meeting,\" \"deadline,\" \"list,\" \"mark,\" \"unmark,\" and \"delete.\"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" * To end the Chatbot, type \"bye.\"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"public class Alpha {","lastModifiedDate":"2023-08-22"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" private UI ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private FileHandler fileHandler;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" private Parser parser;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for the Alpha class. It reads existing tasks from \"data/alpha.txt\" and adds them to the taskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" public Alpha() {","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" ui \u003d new UI();","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler \u003d new FileHandler();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList \u003d fileHandler.readFromFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" parser \u003d new Parser(fileHandler, taskList, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.checkAndCreate();","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" * Starts the Alpha ChatBot. Ends when \"bye\" is input.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" public void run() {","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.introduce();","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" while (!isExit) {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" String input \u003d ui.read();","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" Command command \u003d parser.parse(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" command.execute();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.goodbye();","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" * This is the main method that calls the run() function and starts Chatbot Alpha.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param args Unused.","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" new Alpha().run();","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"-":2,"PetrichorPrecipice":49}},{"path":"src/main/java/alpha/AlphaException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * A class to handle exceptions related to ChatBot Alpha.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public abstract class AlphaException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" public AlphaException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":11}},{"path":"src/main/java/alpha/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of an abstract Command. All other Commands inherit from this class.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" * Commands modify the task list in some way.","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" protected TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" protected FileHandler fileHandler;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" protected UI ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" protected boolean isExit;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for the Command class.","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param taskList The taskList that the command will modify.","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param fileHandler The fileHandler that the command will modify.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param ui The user interface the command interacts with.","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command(TaskList taskList, FileHandler fileHandler, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" this.fileHandler \u003d fileHandler;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" public abstract void execute();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" public boolean isExit() {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" return isExit;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":34}},{"path":"src/main/java/alpha/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of a deadline which has an ending time.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalDate dateBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalTime timeBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" private Deadline(String description, LocalDate dateBy) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description.trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" this.dateBy \u003d dateBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" private Deadline(String description, LocalDate dateBy, LocalTime timeBy) {","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description.trim());","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" this.dateBy \u003d dateBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" this.timeBy \u003d timeBy;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" public static Deadline makeDeadline(String description, String by) {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedDescription \u003d description.trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedBy \u003d by.trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" if (trimmedDescription.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidFormatException(\"Missing a description.\", TaskException.TaskType.DEADLINE);","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitBy \u003d trimmedBy.split(\" \");","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitBy.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Deadline(trimmedDescription, LocalDate.parse(splitBy[0]),","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" LocalTime.parse(splitBy[1], DateTimeFormatter.ofPattern(\"HHmm\")));","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Deadline(trimmedDescription, LocalDate.parse(splitBy[0]));","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"The date is in an invalid format! Enter the date in the format YYYY-MM-DD\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidFormatException e2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e2.getMessage() + \" Please enter a description before the timing of the deadline.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getDateBy() {","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" return dateBy.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getTimeBy() {","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" if (timeBy !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" return timeBy.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" if (timeBy !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dateBy.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) +","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" \" \" + timeBy.format(DateTimeFormatter.ofPattern(\"HH:mm\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"[D]\" + super.toString() + \" (by: \" + dateBy.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\")) + \")\";","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":68}},{"path":"src/main/java/alpha/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" private int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public DeleteCommand(TaskList taskList, FileHandler fileHandler, UI ui, int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.delete(taskList.delete(index), taskList.size());","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.delete(index);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":18}},{"path":"src/main/java/alpha/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of an event which has both a start and end time.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalDate startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalDate endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalTime startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" private LocalTime endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private Event(String description, LocalDate startDate, LocalTime startTime, LocalDate endDate, LocalTime endTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" private Event(String description, LocalDate startDate, LocalDate endDate, LocalTime endTime) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" private Event(String description, LocalDate startDate, LocalTime startTime, LocalDate endDate) {","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" private Event(String description, LocalDate startDate, LocalDate endDate) {","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" public static Event makeEvent(String description, String start, String end) {","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedDescription \u003d description.trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedStart \u003d start.trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" String trimmedEnd \u003d end.trim();","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitStart \u003d trimmedStart.split(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitEnd \u003d trimmedEnd.split(\" \");","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" if (trimmedDescription.length() \u003d\u003d 0) {","lastModifiedDate":"2023-08-29"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidFormatException(\"Missing a description!\", TaskException.TaskType.EVENT);","lastModifiedDate":"2023-08-29"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitStart.length \u003d\u003d 2 \u0026\u0026 splitEnd.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Event(trimmedDescription, LocalDate.parse(splitStart[0]), LocalTime.parse(splitStart[1],","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" DateTimeFormatter.ofPattern(\"HHmm\")), LocalDate.parse(splitEnd[0]),","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" LocalTime.parse(splitEnd[1], DateTimeFormatter.ofPattern(\"HHmm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitStart.length \u003d\u003d 2 \u0026\u0026 splitEnd.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Event(trimmedDescription, LocalDate.parse(splitStart[0]), LocalTime.parse(splitStart[1],","lastModifiedDate":"2023-08-28"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" DateTimeFormatter.ofPattern(\"HHmm\")), LocalDate.parse(splitEnd[0]));","lastModifiedDate":"2023-08-28"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitStart.length \u003d\u003d 1 \u0026\u0026 splitEnd.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Event(trimmedDescription, LocalDate.parse(splitStart[0]), LocalDate.parse(splitEnd[0]),","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" LocalTime.parse(splitEnd[1], DateTimeFormatter.ofPattern(\"HHmm\")));","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitStart.length \u003d\u003d 1 \u0026\u0026 splitEnd.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" return new Event(trimmedDescription, LocalDate.parse(splitStart[0]), LocalDate.parse(splitEnd[0]));","lastModifiedDate":"2023-08-28"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" return null;","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (DateTimeParseException e1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"The date/time is in an invalid format! Enter\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":" \" the date in the format YYYY-MM-DD HHmm\");","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidFormatException e2) {","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e2.getMessage() + \" Please enter a description between \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" \"the start and end timings of the event.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" return null;","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getStart() {","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" return startDate.toString() + getStartTime();","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getEnd() {","lastModifiedDate":"2023-08-27"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" return endDate.toString() + getEndTime();","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" private String getStartTime() {","lastModifiedDate":"2023-08-28"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" if (startTime !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" return \" \" + startTime.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":" private String getEndTime() {","lastModifiedDate":"2023-08-28"},{"lineNumber":98,"author":{"gitId":"PetrichorPrecipice"},"content":" if (endTime !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"PetrichorPrecipice"},"content":" return \" \" + endTime.format(DateTimeFormatter.ofPattern(\"HHmm\"));","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":104,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"PetrichorPrecipice"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"PetrichorPrecipice"},"content":" String output \u003d \"[E]\" + super.toString();","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"PetrichorPrecipice"},"content":" String startDate \u003d \" (from: \" + this.startDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"PetrichorPrecipice"},"content":" String startTime \u003d (this.startTime !\u003d null) ? \" \" + this.startTime.format(DateTimeFormatter.ofPattern(\"HH:mm\")) : \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"PetrichorPrecipice"},"content":" String endDate \u003d \" to: \" + this.endDate.format(DateTimeFormatter.ofPattern(\"MMM d yyyy\"));","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"PetrichorPrecipice"},"content":" String endTime \u003d (this.endTime !\u003d null) ? \" \" + this.endTime.format(DateTimeFormatter.ofPattern(\"HH:mm\")) + \")\" : \")\";","lastModifiedDate":"2023-08-28"},{"lineNumber":111,"author":{"gitId":"PetrichorPrecipice"},"content":" return output + startDate + startTime + endDate + endTime;","lastModifiedDate":"2023-08-28"},{"lineNumber":112,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":113,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":113}},{"path":"src/main/java/alpha/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" public ExitCommand(TaskList taskList, FileHandler fileHandler, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" // No need to do anything here for an ExitCommand","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":14}},{"path":"src/main/java/alpha/FileHandler.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.File;","lastModifiedDate":"2023-08-27"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-27"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-27"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-27"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-27"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-08-27"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-08-27"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class that handles creating the file, reading from the file, storing tasks to the file and updating the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":"public class FileHandler {","lastModifiedDate":"2023-08-27"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private boolean isCreated \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" private File alphaTxt \u003d new File(new File(System.getProperty(\"user.dir\")) +","lastModifiedDate":"2023-08-27"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" File.separator + \"data\" + File.separator + \"alpha.txt\");","lastModifiedDate":"2023-08-27"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" private FileWriter writer;","lastModifiedDate":"2023-08-27"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" private BufferedReader reader;","lastModifiedDate":"2023-08-27"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" public FileHandler() {","lastModifiedDate":"2023-08-27"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" * Checks for the existence of the data/alpha.txt file. Creates it if it does not exist.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" public void checkAndCreate() {","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" boolean directoryExists \u003d java.nio.file.Files.exists(java.nio.file.Paths.get(\"data\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" // Check if the file exists","lastModifiedDate":"2023-08-27"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" boolean dataExists \u003d java.nio.file.Files.exists(java.nio.file.Paths.get(\"data\", \"alpha.txt\"));","lastModifiedDate":"2023-08-27"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" if (!directoryExists) {","lastModifiedDate":"2023-08-27"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" new File(\"data\").mkdir();","lastModifiedDate":"2023-08-27"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" isCreated \u003d alphaTxt.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (!dataExists) {","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" isCreated \u003d alphaTxt.createNewFile();","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"There was a problem reading data from the file.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" * Checks if the file is created or not. If not, it reads any tasks from the file and adds them to the current","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" * task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a new task list with tasks from the file added.","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskList readFromFile() {","lastModifiedDate":"2023-08-29"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-08-27"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" if (isCreated) {","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" Scanner sc \u003d new Scanner(alphaTxt);","lastModifiedDate":"2023-08-27"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-08-27"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" String type \u003d splitInput[0];","lastModifiedDate":"2023-08-27"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" String checked \u003d splitInput[1];","lastModifiedDate":"2023-08-27"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" String description \u003d splitInput[2].trim();","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" Task task;","lastModifiedDate":"2023-08-27"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" if (type.equals(\"T \")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" task \u003d ToDo.createToDo(description);","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (type.equals(\"D \")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" task \u003d Deadline.makeDeadline(description, splitInput[3]);","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" task \u003d Event.makeEvent(description, splitInput[3], splitInput[4]);","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":" if (checked.equals(\"X\")) {","lastModifiedDate":"2023-08-27"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":" assert task !\u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" task.mark();","lastModifiedDate":"2023-08-27"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"The file could not be found\");","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList;","lastModifiedDate":"2023-08-27"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" * Saves a task to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task The task to add to the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" // Saves Task to file whenever a Task is added","lastModifiedDate":"2023-08-27"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" public void saveToFile(Task task) {","lastModifiedDate":"2023-08-27"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" writer \u003d new FileWriter(alphaTxt, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" if (alphaTxt.length() !\u003d 0) {","lastModifiedDate":"2023-08-27"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":98,"author":{"gitId":"PetrichorPrecipice"},"content":" if (task instanceof Deadline) {","lastModifiedDate":"2023-08-27"},{"lineNumber":99,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(\"D |\" + task.getStatusIcon() + \"| \" + task.getDescription() + \" | \"","lastModifiedDate":"2023-08-27"},{"lineNumber":100,"author":{"gitId":"PetrichorPrecipice"},"content":" + ((Deadline) task).getDateBy() + \" \" + ((Deadline) task).getTimeBy());","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (task instanceof ToDo) {","lastModifiedDate":"2023-08-27"},{"lineNumber":102,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(\"T |\" + task.getStatusIcon() + \"| \" + task.getDescription());","lastModifiedDate":"2023-08-27"},{"lineNumber":103,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":104,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(\"E |\" + task.getStatusIcon() + \"| \" + task.getDescription() + \" | \" + ((Event) task).getStart()","lastModifiedDate":"2023-08-27"},{"lineNumber":105,"author":{"gitId":"PetrichorPrecipice"},"content":" + \" | \" + ((Event) task).getEnd());","lastModifiedDate":"2023-08-27"},{"lineNumber":106,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":107,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":109,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"I/O Exception\");","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":111,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":112,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":113,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"PetrichorPrecipice"},"content":" * Checks or unchecks a task in the file depending on the second boolean parameter.","lastModifiedDate":"2023-08-31"},{"lineNumber":115,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":116,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index The index of the task to be marked or unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":117,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param check Boolean of whether the task is to be checked or unchecked.","lastModifiedDate":"2023-08-31"},{"lineNumber":118,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":119,"author":{"gitId":"PetrichorPrecipice"},"content":" // Checks or unchecks a task in the file. Does so by creating a temp file that copies everything over","lastModifiedDate":"2023-08-27"},{"lineNumber":120,"author":{"gitId":"PetrichorPrecipice"},"content":" // except the task that is being checked/unchecked.","lastModifiedDate":"2023-08-27"},{"lineNumber":121,"author":{"gitId":"PetrichorPrecipice"},"content":" public void checkOrUncheck(int index, boolean check) {","lastModifiedDate":"2023-08-27"},{"lineNumber":122,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":123,"author":{"gitId":"PetrichorPrecipice"},"content":" int temp_index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":124,"author":{"gitId":"PetrichorPrecipice"},"content":" File temp \u003d File.createTempFile(\"file\", \".txt\", alphaTxt.getParentFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":125,"author":{"gitId":"PetrichorPrecipice"},"content":" writer \u003d new FileWriter(temp, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":126,"author":{"gitId":"PetrichorPrecipice"},"content":" reader \u003d new BufferedReader(new FileReader(alphaTxt));","lastModifiedDate":"2023-08-27"},{"lineNumber":127,"author":{"gitId":"PetrichorPrecipice"},"content":" String curr \u003d reader.readLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":128,"author":{"gitId":"PetrichorPrecipice"},"content":" while (temp_index \u003e 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":129,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(curr);","lastModifiedDate":"2023-08-27"},{"lineNumber":130,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":131,"author":{"gitId":"PetrichorPrecipice"},"content":" temp_index--;","lastModifiedDate":"2023-08-27"},{"lineNumber":132,"author":{"gitId":"PetrichorPrecipice"},"content":" curr \u003d reader.readLine();","lastModifiedDate":"2023-08-27"},{"lineNumber":133,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":134,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] currSplit \u003d curr.split(\"\\\\|\");","lastModifiedDate":"2023-08-27"},{"lineNumber":135,"author":{"gitId":"PetrichorPrecipice"},"content":" if (check) {","lastModifiedDate":"2023-08-27"},{"lineNumber":136,"author":{"gitId":"PetrichorPrecipice"},"content":" currSplit[1] \u003d \"X\";","lastModifiedDate":"2023-08-27"},{"lineNumber":137,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-27"},{"lineNumber":138,"author":{"gitId":"PetrichorPrecipice"},"content":" currSplit[1] \u003d \" \";","lastModifiedDate":"2023-08-27"},{"lineNumber":139,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":140,"author":{"gitId":"PetrichorPrecipice"},"content":" curr \u003d String.join(\"|\", currSplit);","lastModifiedDate":"2023-08-27"},{"lineNumber":141,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(curr);","lastModifiedDate":"2023-08-27"},{"lineNumber":142,"author":{"gitId":"PetrichorPrecipice"},"content":" while ((curr \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":143,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":144,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(curr);","lastModifiedDate":"2023-08-27"},{"lineNumber":145,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":146,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":147,"author":{"gitId":"PetrichorPrecipice"},"content":" reader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":148,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":149,"author":{"gitId":"PetrichorPrecipice"},"content":" alphaTxt.delete();","lastModifiedDate":"2023-08-27"},{"lineNumber":150,"author":{"gitId":"PetrichorPrecipice"},"content":" temp.renameTo(alphaTxt);","lastModifiedDate":"2023-08-27"},{"lineNumber":151,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":152,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"There was an issue!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":153,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":154,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":155,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":156,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":157,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":158,"author":{"gitId":"PetrichorPrecipice"},"content":" * Deletes a task from the file.","lastModifiedDate":"2023-08-31"},{"lineNumber":159,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":160,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index Index of the task to be deleted.","lastModifiedDate":"2023-08-31"},{"lineNumber":161,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":162,"author":{"gitId":"PetrichorPrecipice"},"content":" // Deletes a task by creating a temp file and copying everything but the deleted task over.","lastModifiedDate":"2023-08-27"},{"lineNumber":163,"author":{"gitId":"PetrichorPrecipice"},"content":" public void delete(int index) {","lastModifiedDate":"2023-08-27"},{"lineNumber":164,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-27"},{"lineNumber":165,"author":{"gitId":"PetrichorPrecipice"},"content":" int temp_index \u003d index;","lastModifiedDate":"2023-08-27"},{"lineNumber":166,"author":{"gitId":"PetrichorPrecipice"},"content":" File temp \u003d File.createTempFile(\"file\", \".txt\", alphaTxt.getParentFile());","lastModifiedDate":"2023-08-27"},{"lineNumber":167,"author":{"gitId":"PetrichorPrecipice"},"content":" writer \u003d new FileWriter(temp, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"PetrichorPrecipice"},"content":" reader \u003d new BufferedReader(new FileReader(alphaTxt));","lastModifiedDate":"2023-08-27"},{"lineNumber":169,"author":{"gitId":"PetrichorPrecipice"},"content":" String curr;","lastModifiedDate":"2023-08-27"},{"lineNumber":170,"author":{"gitId":"PetrichorPrecipice"},"content":" while ((curr \u003d reader.readLine()) !\u003d null) {","lastModifiedDate":"2023-08-27"},{"lineNumber":171,"author":{"gitId":"PetrichorPrecipice"},"content":" if (temp_index \u003d\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":172,"author":{"gitId":"PetrichorPrecipice"},"content":" temp_index--;","lastModifiedDate":"2023-08-27"},{"lineNumber":173,"author":{"gitId":"PetrichorPrecipice"},"content":" continue;","lastModifiedDate":"2023-08-27"},{"lineNumber":174,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":175,"author":{"gitId":"PetrichorPrecipice"},"content":" if (temp_index !\u003d index \u0026\u0026 index !\u003d 1) {","lastModifiedDate":"2023-08-27"},{"lineNumber":176,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(System.lineSeparator());","lastModifiedDate":"2023-08-27"},{"lineNumber":177,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":178,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.write(curr);","lastModifiedDate":"2023-08-27"},{"lineNumber":179,"author":{"gitId":"PetrichorPrecipice"},"content":" temp_index--;","lastModifiedDate":"2023-08-27"},{"lineNumber":180,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":181,"author":{"gitId":"PetrichorPrecipice"},"content":" reader.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":182,"author":{"gitId":"PetrichorPrecipice"},"content":" writer.close();","lastModifiedDate":"2023-08-27"},{"lineNumber":183,"author":{"gitId":"PetrichorPrecipice"},"content":" alphaTxt.delete();","lastModifiedDate":"2023-08-27"},{"lineNumber":184,"author":{"gitId":"PetrichorPrecipice"},"content":" temp.renameTo(alphaTxt);","lastModifiedDate":"2023-08-27"},{"lineNumber":185,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-27"},{"lineNumber":186,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-27"},{"lineNumber":187,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"There was an error!\");","lastModifiedDate":"2023-08-27"},{"lineNumber":188,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":189,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":190,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-27"}],"authorContributionMap":{"PetrichorPrecipice":190}},{"path":"src/main/java/alpha/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class FindCommand extends Command{","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" private final String input;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" public FindCommand(TaskList taskList, FileHandler fh, UI ui, String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fh, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" this.input \u003d input.trim();","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" TaskList newList \u003d taskList.search(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.list(newList);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"PetrichorPrecipice":18}},{"path":"src/main/java/alpha/InvalidCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" public InvalidCommand(TaskList taskList, FileHandler fileHandler, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" // Nothing to execute for an invalid command","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":14}},{"path":"src/main/java/alpha/InvalidFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when a task is input with an invalid format.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class InvalidFormatException extends TaskException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" public InvalidFormatException(String errorMessage, TaskType task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":11}},{"path":"src/main/java/alpha/InvalidIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when using an invalid index to mark, delete, or unmark a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class InvalidIndexException extends AlphaException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public InvalidIndexException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":10}},{"path":"src/main/java/alpha/InvalidInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when an input is not recognized.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class InvalidInputException extends AlphaException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public InvalidInputException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":10}},{"path":"src/main/java/alpha/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" public ListCommand(TaskList taskList, FileHandler fileHandler, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.list(taskList);","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":14}},{"path":"src/main/java/alpha/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" private int index;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public MarkCommand(TaskList taskList, FileHandler fileHandler, UI ui, int index) {","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.mark(taskList.mark(index));","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.checkOrUncheck(index, true);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":18}},{"path":"src/main/java/alpha/MissingIndexException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when using a missing index to mark, delete, or unmark a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class MissingIndexException extends AlphaException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public MissingIndexException(String errorMessage) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":10}},{"path":"src/main/java/alpha/MissingInfoException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Exception thrown when a task is inputted with missing information.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class MissingInfoException extends TaskException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" public MissingInfoException(String errorMessage, TaskType task) {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage, task);","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":11}},{"path":"src/main/java/alpha/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class that handles the user\u0027s inputs and makes sense of them. Uses certain key phrases for different commands.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"public class Parser {","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String END \u003d \"bye\";","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String LIST \u003d \"list\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String CHECK \u003d \"mark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String UNCHECK \u003d \"unmark\";","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String TODO \u003d \"todo\";","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String EVENT \u003d \"event\";","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private final static String FIND \u003d \"find\";","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" private FileHandler fileHandler;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" private TaskList taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" private UI ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for the class Parser.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param fileHandler FileHandler to write to.","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param taskList TaskList to add tasks to.","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param ui User Interface to output responses for Alpha.","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" public Parser(FileHandler fileHandler, TaskList taskList, UI ui) {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" this.fileHandler \u003d fileHandler;","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a command based on the user\u0027s input.","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param input User input to be parsed.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return Command to be executed.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command parse(String input) {","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \"); // Splits string to check for \"mark\" or \"unmark\"","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" if (input.equals(LIST)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" return this.list();","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(CHECK)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" return check(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(UNCHECK)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" return uncheck(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(DEADLINE)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" return addDeadline(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(EVENT)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" return addEvent(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(TODO)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" return addToDo(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (input.equals(TODO)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" return delete(input);","lastModifiedDate":"2023-08-30"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (input.equals(END)) {","lastModifiedDate":"2023-08-30"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" return new ExitCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(DELETE)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" return delete(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (splitInput[0].equals(FIND)) {","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" return find(input);","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidInputException(\"Invalid Input!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (MissingIndexException e1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e1.getMessage() + \" Please enter the index of the number you would like to mark.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidIndexException e2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e2.getMessage() + \" Please enter a valid index. To check all valid indices, \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":" \"type \\\"list\\\" and press ENTER\");","lastModifiedDate":"2023-08-30"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidInputException e3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e3.getMessage() + \" Please input something meaningful.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (NumberFormatException e4) {","lastModifiedDate":"2023-08-30"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(\"Please enter a number.\");","lastModifiedDate":"2023-08-30"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (InvalidFormatException | MissingInfoException e5) {","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" if (e5.getTask() \u003d\u003d TaskException.TaskType.TODO) {","lastModifiedDate":"2023-08-30"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e5.getMessage() + \" Please enter a todo in the \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":" \"format \\\"todo YOUR_DESCRIPTION\\\"\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (e5.getTask() \u003d\u003d TaskException.TaskType.DEADLINE) {","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e5.getMessage() + \" Please enter a deadline in the format \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":" \"\\\"deadline YOUR_DESCRIPTION /by YOUR_TIME\\\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (e5.getTask() \u003d\u003d TaskException.TaskType.EVENT) {","lastModifiedDate":"2023-08-30"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(e5.getMessage() + \" Please enter an event in the format \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" \"\\\"event YOUR_DESCRIPTION \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" \"/from START_TIME /to END_TIME\\\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" return new InvalidCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":98,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a list command.","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":101,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return Command that lists all the stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":102,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":103,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command list() {","lastModifiedDate":"2023-08-30"},{"lineNumber":104,"author":{"gitId":"PetrichorPrecipice"},"content":" return new ListCommand(taskList, fileHandler, ui);","lastModifiedDate":"2023-08-30"},{"lineNumber":105,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":106,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":107,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that adds an event based on an input.","lastModifiedDate":"2023-08-31"},{"lineNumber":109,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that adds an event.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingInfoException If length of splitInput \u003c 3","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws InvalidFormatException If /from and /to are not found within the input.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command addEvent(String input) throws MissingInfoException, InvalidFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":115,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":116,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003c 3) {","lastModifiedDate":"2023-08-30"},{"lineNumber":117,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingInfoException(\"Missing Information!\", TaskException.TaskType.EVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":118,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":119,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitEvent \u003d input.split(\"/\");","lastModifiedDate":"2023-08-30"},{"lineNumber":120,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitEvent[1].startsWith(\"from\") \u0026\u0026 splitEvent[2].startsWith(\"to\")) {","lastModifiedDate":"2023-08-30"},{"lineNumber":121,"author":{"gitId":"PetrichorPrecipice"},"content":" Event event \u003d Event.makeEvent(splitEvent[0].substring(6),","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"PetrichorPrecipice"},"content":" splitEvent[1].substring(5),","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"PetrichorPrecipice"},"content":" splitEvent[2].substring(3));","lastModifiedDate":"2023-08-30"},{"lineNumber":124,"author":{"gitId":"PetrichorPrecipice"},"content":" return new AddCommand(taskList, fileHandler, ui, event);","lastModifiedDate":"2023-08-30"},{"lineNumber":125,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":126,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidFormatException(\"Invalid Format!\", TaskException.TaskType.EVENT);","lastModifiedDate":"2023-08-30"},{"lineNumber":127,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":128,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":129,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":130,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":131,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":132,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that adds a ToDo based on an input.","lastModifiedDate":"2023-08-31"},{"lineNumber":133,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":134,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that adds a ToDo.","lastModifiedDate":"2023-08-31"},{"lineNumber":135,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingInfoException If length of splitInput \u003d\u003d 1","lastModifiedDate":"2023-08-31"},{"lineNumber":136,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":137,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command addToDo(String input) throws MissingInfoException {","lastModifiedDate":"2023-08-30"},{"lineNumber":138,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":139,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":140,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingInfoException(\"Missing Information!\", TaskException.TaskType.TODO);","lastModifiedDate":"2023-08-30"},{"lineNumber":141,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":142,"author":{"gitId":"PetrichorPrecipice"},"content":" ToDo todo \u003d ToDo.createToDo(input.substring(5));","lastModifiedDate":"2023-08-31"},{"lineNumber":143,"author":{"gitId":"PetrichorPrecipice"},"content":" return new AddCommand(taskList, fileHandler, ui, todo);","lastModifiedDate":"2023-08-30"},{"lineNumber":144,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":145,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":146,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":147,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":148,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that adds a deadline based on an input.","lastModifiedDate":"2023-08-31"},{"lineNumber":149,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":150,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that adds a ToDo.","lastModifiedDate":"2023-08-31"},{"lineNumber":151,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingInfoException If length of splitInput \u003d\u003d 1","lastModifiedDate":"2023-08-31"},{"lineNumber":152,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":153,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command addDeadline(String input) throws MissingInfoException, InvalidFormatException {","lastModifiedDate":"2023-08-30"},{"lineNumber":154,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":155,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003c 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":156,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingInfoException(\"Missing Information!\", TaskException.TaskType.DEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":157,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (input.split(\"/by\").length !\u003d 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":158,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidFormatException(\"Invalid Format!\", TaskException.TaskType.DEADLINE);","lastModifiedDate":"2023-08-30"},{"lineNumber":159,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":160,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitDeadline \u003d input.split(\"/by\");","lastModifiedDate":"2023-08-30"},{"lineNumber":161,"author":{"gitId":"PetrichorPrecipice"},"content":" Deadline deadline \u003d Deadline.makeDeadline(splitDeadline[0].substring(9),","lastModifiedDate":"2023-08-30"},{"lineNumber":162,"author":{"gitId":"PetrichorPrecipice"},"content":" splitDeadline[1]);","lastModifiedDate":"2023-08-30"},{"lineNumber":163,"author":{"gitId":"PetrichorPrecipice"},"content":" return new AddCommand(taskList, fileHandler, ui, deadline);","lastModifiedDate":"2023-08-30"},{"lineNumber":164,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":165,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":166,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":167,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":168,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that deletes a task from storage based on an input.","lastModifiedDate":"2023-08-31"},{"lineNumber":169,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":170,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that deletes a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":171,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingIndexException if the index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":172,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws InvalidIndexException if the index exceeds or is lesser than the number of stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":173,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":174,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command delete(String input) throws MissingIndexException, InvalidIndexException {","lastModifiedDate":"2023-08-30"},{"lineNumber":175,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":176,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":177,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingIndexException(\"Missing Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":178,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (Integer.parseInt(splitInput[1]) \u003e taskList.size()) {","lastModifiedDate":"2023-08-30"},{"lineNumber":179,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidIndexException(\"Invalid Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":180,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":181,"author":{"gitId":"PetrichorPrecipice"},"content":" return new DeleteCommand(taskList, fileHandler, ui, Integer.parseInt(splitInput[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":182,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":183,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":184,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":185,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":186,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that checks a task based on an index.","lastModifiedDate":"2023-08-31"},{"lineNumber":187,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":188,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that checks a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":189,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingIndexException if the index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":190,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws InvalidIndexException if the index exceeds or is lesser than the number of stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":191,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":192,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command check(String input) throws MissingIndexException, InvalidIndexException {","lastModifiedDate":"2023-08-30"},{"lineNumber":193,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":194,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":195,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingIndexException(\"Missing Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":196,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (Integer.parseInt(splitInput[1]) \u003e taskList.size() || splitInput.length \u003e 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":197,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidIndexException(\"Invalid Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":198,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":199,"author":{"gitId":"PetrichorPrecipice"},"content":" return new MarkCommand(taskList, fileHandler, ui, Integer.parseInt(splitInput[1]));","lastModifiedDate":"2023-08-30"},{"lineNumber":200,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":201,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":202,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":203,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":204,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns a Command that unchecks a task based on an index.","lastModifiedDate":"2023-08-31"},{"lineNumber":205,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":206,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return a Command that unchecks a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":207,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws MissingIndexException if the index is missing.","lastModifiedDate":"2023-08-31"},{"lineNumber":208,"author":{"gitId":"PetrichorPrecipice"},"content":" * @throws InvalidIndexException if the index exceeds or is lesser than the number of stored tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":209,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":210,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command uncheck(String input) throws MissingIndexException, InvalidIndexException {","lastModifiedDate":"2023-08-30"},{"lineNumber":211,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-30"},{"lineNumber":212,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-30"},{"lineNumber":213,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingIndexException(\"Missing Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":214,"author":{"gitId":"PetrichorPrecipice"},"content":" } else if (Integer.parseInt(splitInput[1]) \u003e taskList.size() || splitInput.length \u003e 2) {","lastModifiedDate":"2023-08-30"},{"lineNumber":215,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new InvalidIndexException(\"Invalid Index!\");","lastModifiedDate":"2023-08-30"},{"lineNumber":216,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-30"},{"lineNumber":217,"author":{"gitId":"PetrichorPrecipice"},"content":" return new UnmarkCommand(taskList, fileHandler, ui, Integer.parseInt(splitInput[1]));","lastModifiedDate":"2023-08-31"},{"lineNumber":218,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":219,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":220,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":221,"author":{"gitId":"PetrichorPrecipice"},"content":" public Command find(String input) throws MissingIndexException {","lastModifiedDate":"2023-08-31"},{"lineNumber":222,"author":{"gitId":"PetrichorPrecipice"},"content":" String[] splitInput \u003d input.split(\" \");","lastModifiedDate":"2023-08-31"},{"lineNumber":223,"author":{"gitId":"PetrichorPrecipice"},"content":" if (splitInput.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-31"},{"lineNumber":224,"author":{"gitId":"PetrichorPrecipice"},"content":" throw new MissingIndexException(\"Missing Index!\");","lastModifiedDate":"2023-08-31"},{"lineNumber":225,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":226,"author":{"gitId":"PetrichorPrecipice"},"content":" splitInput[0] \u003d \"\";","lastModifiedDate":"2023-08-31"},{"lineNumber":227,"author":{"gitId":"PetrichorPrecipice"},"content":" return new FindCommand(taskList, fileHandler, ui, String.join(\" \", splitInput));","lastModifiedDate":"2023-08-31"},{"lineNumber":228,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":229,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":230,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PetrichorPrecipice":230}},{"path":"src/main/java/alpha/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" private String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for Task class. Sets isDone to false since tasks are entered unchecked.","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param description Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return Description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getDescription() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" return description;","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the marked/unmarked status of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return \"X\" if marked, \" \" if not.","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" return isDone ? \"X\" : \" \"; // Mark task done with X","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" * Marks the task as done.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" public void mark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" isDone \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" * Marks the task as not done.","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" public void unmark() {","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" isDone \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the String representation of a task, including its marked status and description.","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return String representation of a task.","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"[\" + getStatusIcon() + \"] \" + getDescription();","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":64}},{"path":"src/main/java/alpha/TaskException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class to handle exceptions related to entering tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public abstract class TaskException extends AlphaException {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * Enumeration of task types.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" public enum TaskType {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" DEADLINE,","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" TODO,","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" EVENT","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" private TaskType task;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for TaskException class.","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param errorMessage The error message.","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task The type of task.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskException(String errorMessage, TaskType task) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" * Return the type of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The task type.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskType getTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" return task;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":38}},{"path":"src/main/java/alpha/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.util.Locale;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class that stores the current list of tasks.","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * @author Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"public class TaskList {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" * Constructor for TaskList class. Creates a new ArrayList.","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskList() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the current size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return the current size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" public int size() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList.size();","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" * Adds a task to the current task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-27"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param i The index of the returned task.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task getTask(int i) {","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" return taskList.get(i);","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":" * Marks a task at the given index and returns it.","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index The index of the marked and returned task.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The marked task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task mark(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" Task curr \u003d getTask(index - 1); // Decrement by 1 to match display index","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" curr.mark();","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" return curr;","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":" * Unmarks a task at the given index and returns it.","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index The index of the unmarked and returned task.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The unmarked task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task unmark(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" Task curr \u003d getTask(index - 1); // Decrement by 1 to match display index","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" curr.unmark();","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" return curr;","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" * Deletes a task at the given index and returns it.","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param index The index of the deleted and returned task.","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return The deleted task at the given index.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" public Task delete(int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":" Task curr \u003d taskList.get(index - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" taskList.remove(index - 1);","lastModifiedDate":"2023-08-23"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" return curr;","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" public TaskList search(String input) {","lastModifiedDate":"2023-08-31"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":" TaskList newList \u003d new TaskList();","lastModifiedDate":"2023-08-31"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" Task curr \u003d taskList.get(i);","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" if (curr.getDescription().toUpperCase().contains(input.toUpperCase())) {","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" newList.add(curr);","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" return newList;","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":97}},{"path":"src/main/java/alpha/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class representation of a ToDo task.","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" * Creates a ToDo instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param description The description of the task.","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return A new ToDo instance.","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public static ToDo createToDo(String description) {","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" return new ToDo(description);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private ToDo(String description) {","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" super(description.trim());","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":26}},{"path":"src/main/java/alpha/UI.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"/**","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":" * Class that handles ChatBot Alpha\u0027s inputs and outputs with the user.","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" * Author: Wong Joon Hung","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"public class UI {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" private static final String LINE_SEPARATOR \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private String intro \u003d LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" \" Hello! I\u0027m Alpha\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" \" What can I do for you?\\n\" + LINE_SEPARATOR;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" // Outro message","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" private String end \u003d LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" LINE_SEPARATOR;","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" public UI() {","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs Chatbot Alpha\u0027s Introduction message.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" public void introduce() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(intro);","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs Chatbot Alpha\u0027s Goodbye message.","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" public void goodbye() {","lastModifiedDate":"2023-08-29"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(end);","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a message to inform the user that a task was added.","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task Task that is being added.","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param size Current size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" public void taskAdded(Task task, int size) {","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Alright! I\u0027ve added this task:\\n \" + \" \" + task","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"PetrichorPrecipice"},"content":" + \"\\nNow you have \" + size + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"PetrichorPrecipice"},"content":" LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":52,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a message to tell the user a task has been marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task Task that is being marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"PetrichorPrecipice"},"content":" public void mark(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":58,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Nice! I\u0027ve marked this task as done:\\n\" + \" \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":60,"author":{"gitId":"PetrichorPrecipice"},"content":" task +","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"PetrichorPrecipice"},"content":" \"\\n\" + LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a message to tell the user a task has been unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task Task that is being unmarked.","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"PetrichorPrecipice"},"content":" public void unmark(Task task) {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Cool! I\u0027ve marked this task as not done yet:\\n\" + \" \" +","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"PetrichorPrecipice"},"content":" task +","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"PetrichorPrecipice"},"content":" \"\\n\" + LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":75,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":76,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a message to tell the user a task has been deleted and the size of the remaining list.","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param task Task that is being marked.","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param size Remaining size of the task list.","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"PetrichorPrecipice"},"content":" public void delete(Task task, int size) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":85,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Noted. I\u0027ve removed this task:\\n\" + \" \" + task + \"\\n Now You have \" + size +","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"PetrichorPrecipice"},"content":" \" tasks in the list.\" + \"\\n\" + LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":87,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":88,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":90,"author":{"gitId":"PetrichorPrecipice"},"content":" * Outputs a display of the current list.","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"PetrichorPrecipice"},"content":" * @param taskList Current taskList.","lastModifiedDate":"2023-08-31"},{"lineNumber":93,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":94,"author":{"gitId":"PetrichorPrecipice"},"content":" public void list(TaskList taskList) {","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"PetrichorPrecipice"},"content":" int size \u003d taskList.size();","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"PetrichorPrecipice"},"content":" if (size \u003d\u003d 0) {","lastModifiedDate":"2023-08-31"},{"lineNumber":97,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" + \"There are no tasks in your list.\" + \"\\n\" + LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":98,"author":{"gitId":"PetrichorPrecipice"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":99,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR + \"\\n\" +","lastModifiedDate":"2023-08-31"},{"lineNumber":100,"author":{"gitId":"PetrichorPrecipice"},"content":" \"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"PetrichorPrecipice"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"PetrichorPrecipice"},"content":" int plusOne \u003d i + 1; // Increment by one so starting display index is 1","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(plusOne + \". \" + taskList.getTask(i));","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"PetrichorPrecipice"},"content":" System.out.println(LINE_SEPARATOR);","lastModifiedDate":"2023-08-31"},{"lineNumber":106,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":108,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":109,"author":{"gitId":"PetrichorPrecipice"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":110,"author":{"gitId":"PetrichorPrecipice"},"content":" * Returns the current user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":111,"author":{"gitId":"PetrichorPrecipice"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":112,"author":{"gitId":"PetrichorPrecipice"},"content":" * @return the current user input.","lastModifiedDate":"2023-08-31"},{"lineNumber":113,"author":{"gitId":"PetrichorPrecipice"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":114,"author":{"gitId":"PetrichorPrecipice"},"content":" public String read() {","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"PetrichorPrecipice"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"PetrichorPrecipice"},"content":" return sc.nextLine();","lastModifiedDate":"2023-08-29"},{"lineNumber":117,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":118,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":118}},{"path":"src/main/java/alpha/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":" private final int index;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":" public UnmarkCommand(TaskList taskList, FileHandler fh, UI ui, int index) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":" super(taskList, fh, ui);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":" isExit \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":" this.index \u003d index;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" @Override","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" public void execute() {","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" Task unmarkedTask \u003d taskList.unmark(index);","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" ui.unmark(unmarkedTask);","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" fileHandler.checkOrUncheck(index, false);","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"PetrichorPrecipice":19}},{"path":"src/test/java/alpha/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"public class EventTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":" private final ByteArrayOutputStream outContent \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" private final PrintStream originalOut \u003d System.out;","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" public void makeEvent_invalidDate_dateTimeParse_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" Event.makeEvent(\"meeting\", \"2022-15-01\", \"2022-20-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"The date/time is in an invalid format! Enter the date in the format YYYY-MM-DD HHmm\\n\",","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" public void makeEvent_invalidTime_dateTimeParse_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" Event.makeEvent(\"meeting\", \"2022-01-01 2500\", \"2022-01-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"The date/time is in an invalid format! Enter the date in the format YYYY-MM-DD HHmm\\n\",","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" public void makeEvent_missingDescription_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(new PrintStream(outContent));","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" Event.makeEvent(\" \", \"2022-01-01\", \"2022-01-01\");","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"Missing a description! Please enter a description between \" +","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" \"the start and end timings of the event.\\n\", outContent.toString());","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" System.setOut(originalOut);","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PetrichorPrecipice":42}},{"path":"src/test/java/alpha/ParseTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"package alpha;","lastModifiedDate":"2023-08-30"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-08-30"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"import java.io.File;","lastModifiedDate":"2023-08-30"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-08-30"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"public class ParseTest {","lastModifiedDate":"2023-08-30"},{"lineNumber":11,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":12,"author":{"gitId":"PetrichorPrecipice"},"content":" private Parser parser;","lastModifiedDate":"2023-08-30"},{"lineNumber":13,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":15,"author":{"gitId":"PetrichorPrecipice"},"content":" public void addDeadline_invalidFormat_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":17,"author":{"gitId":"PetrichorPrecipice"},"content":" parser \u003d new Parser(new FileHandler(), new TaskList(), new UI());","lastModifiedDate":"2023-08-30"},{"lineNumber":18,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(Deadline.makeDeadline(\".\", \"2022-10-12 1200\"),","lastModifiedDate":"2023-08-30"},{"lineNumber":19,"author":{"gitId":"PetrichorPrecipice"},"content":" (parser.addDeadline(\"deadline meeting /by\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":20,"author":{"gitId":"PetrichorPrecipice"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":22,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"Invalid Format!\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"PetrichorPrecipice"},"content":" public void addEvent_invalidFormat_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":29,"author":{"gitId":"PetrichorPrecipice"},"content":" parser \u003d new Parser(new FileHandler(), new TaskList(), new UI());","lastModifiedDate":"2023-08-30"},{"lineNumber":30,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"0\", parser.addEvent(\"event meeting /fro 2022-10-10 1200 /to 2022-10-10\"));","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"PetrichorPrecipice"},"content":" fail();","lastModifiedDate":"2023-08-30"},{"lineNumber":32,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":33,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"Invalid Format!\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":34,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":35,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":36,"author":{"gitId":"PetrichorPrecipice"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"PetrichorPrecipice"},"content":" @Test","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"PetrichorPrecipice"},"content":" public void addEvent_missingInfo_exceptionThrown() {","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"PetrichorPrecipice"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"PetrichorPrecipice"},"content":" parser \u003d new Parser(new FileHandler(), new TaskList(), new UI());","lastModifiedDate":"2023-08-30"},{"lineNumber":41,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(Event.makeEvent(\".\", \" \", \" \"), (parser.addEvent(\"event meeting\")));","lastModifiedDate":"2023-08-30"},{"lineNumber":42,"author":{"gitId":"PetrichorPrecipice"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":43,"author":{"gitId":"PetrichorPrecipice"},"content":" assertEquals(\"Missing Information!\", e.getMessage());","lastModifiedDate":"2023-08-30"},{"lineNumber":44,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":45,"author":{"gitId":"PetrichorPrecipice"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":46,"author":{"gitId":"PetrichorPrecipice"},"content":"}","lastModifiedDate":"2023-08-30"}],"authorContributionMap":{"PetrichorPrecipice":46}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"PetrichorPrecipice"},"content":"eat","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"PetrichorPrecipice"},"content":"todo sleep","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"PetrichorPrecipice"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"PetrichorPrecipice"},"content":"deadline work /by 5 pm","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"PetrichorPrecipice"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"PetrichorPrecipice"},"content":"event meeting /from 6pm /to 8pm","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"PetrichorPrecipice"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"PetrichorPrecipice"},"content":"delete 2","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"PetrichorPrecipice"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"PetrichorPrecipice"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"PetrichorPrecipice":10}},{"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":"PetrichorPrecipice"},"content":"java -classpath ../bin Alpha \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":{"-":37,"PetrichorPrecipice":1}}] diff --git a/PetrichorPrecipice_ip_master/commits.json b/PetrichorPrecipice_ip_master/commits.json index b5bd49e7..170df0a8 100644 --- a/PetrichorPrecipice_ip_master/commits.json +++ b/PetrichorPrecipice_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"PetrichorPrecipice":[{"date":"2023-08-22","commitResults":[{"hash":"d60c31dfca35ee841ec62df74ecc31940b2e9517","isMergeCommit":false,"messageTitle":"Change Chat Bot name","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"eca0a2cf6d6f78f7cd11e27c192216ab7d507d7e","isMergeCommit":false,"messageTitle":"Added Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}}]},{"date":"2023-08-23","commitResults":[{"hash":"ba1a0b3ffbbf54b19d6f9f1d8255b83f8533144b","isMergeCommit":false,"messageTitle":"Added List class with add, list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":5}}},{"hash":"ee2b1df27a29e50ffa401c71cea17dcd043737c4","isMergeCommit":false,"messageTitle":"Added the checking and unchecking of tasks with new Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":40}}},{"hash":"924724a07c29526fa65d0513a327d5cc5a780363","isMergeCommit":false,"messageTitle":"Added Event, Deadline, ToDo classes","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":13}}},{"hash":"4eadd9d882b89c984fe95f88784169fe61a00a5f","isMergeCommit":false,"messageTitle":"Added Exception Handling","messageBody":"","tags":["Level-5","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":22}}},{"hash":"036248fe13153ba2219ed418995466c915230624","isMergeCommit":false,"messageTitle":"Added delete functionality and Automated UI Testing","messageBody":"","tags":["Level-6","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":48,"deletions":26},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"000061e3cb4b69691224e27ecd11516b759cceb0","isMergeCommit":false,"messageTitle":"Added File Storage","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":186,"deletions":10},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"0b5a2d3c413ffeaab0297a70ecd95d7934cc651a","isMergeCommit":false,"messageTitle":"Add Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":30}}}]},{"date":"2023-08-29","commitResults":[{"hash":"007f7b2b8e00d7045071fc7fe74d29c53a1b9377","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":549,"deletions":217}}},{"hash":"cb4c09e7b49931b4e4fa7e59677f9431e990efb0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Alpha.java\n#\tsrc/main/java/Deadline.java\n#\tsrc/main/java/Event.java\n#\tsrc/main/java/FileHandler.java\n","fileTypesAndContributionMap":{}},{"hash":"118eb7d9330e4a891fb7ab073409598107b17179","isMergeCommit":false,"messageTitle":"Add More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":412,"deletions":220}}},{"hash":"268a26a3b0412e663050a3f54c751bd173e4fdf9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Alpha.java\n","fileTypesAndContributionMap":{}},{"hash":"e8d4991b6cfae5be25c6616b2e35a8c99aa998c1","isMergeCommit":false,"messageTitle":"Revert \"Add More OOP\"","messageBody":"This reverts commit 118eb7d9330e4a891fb7ab073409598107b17179.\n","fileTypesAndContributionMap":{"java":{"insertions":220,"deletions":412}}},{"hash":"ec37909504f93cf729e50892f63c5b4e0743882d","isMergeCommit":false,"messageTitle":"Remove Unused Import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"2be399956bc6f02730e2b2e3b7da008a928d0141","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027 of https://github.com/PetrichorPrecipice/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Alpha.java\n","fileTypesAndContributionMap":{}},{"hash":"f7ed21d0279f98b68510954ac33bc215769894ab","isMergeCommit":true,"messageTitle":"Merge branches \u0027master\u0027 and \u0027master\u0027 of https://github.com/PetrichorPrecipice/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Alpha.java\n#\tsrc/main/java/Deadline.java\n#\tsrc/main/java/Event.java\n#\tsrc/main/java/FileHandler.java\n","fileTypesAndContributionMap":{}},{"hash":"4d44154befd5a403ebe9ec11f694bd60ff8c0214","isMergeCommit":false,"messageTitle":"Add More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":358,"deletions":302}}},{"hash":"88274d0cfb72c24d2c831513d4fe9e82876b74b2","isMergeCommit":false,"messageTitle":"Add Package alpha","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}}]},{"date":"2023-08-30","commitResults":[{"hash":"7c29716632021d2e4e3c3277c22155b29d30f456","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/PetrichorPrecipice/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"268ae3885e89e170ab550f370208c81685cec920","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":3},"java":{"insertions":274,"deletions":151}}},{"hash":"ea22ea036731e616849d7688d1f094df55cb2de8","isMergeCommit":false,"messageTitle":"Add JAR file code","messageBody":"","tags":["v0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"adbc04c73995e4628abe0293a0ccd1a84865cd6a","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":223,"deletions":35}}},{"hash":"6db9484fa41e883698c27095cfd8b1d0428d1b73","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":267,"deletions":176}}},{"hash":"a339e77dde934fb72e0a62beab971263cd3decdb","isMergeCommit":false,"messageTitle":"Add Find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":10}}}]}]},"authorFileTypeContributionMap":{"PetrichorPrecipice":{"java":1314,"md":1,"fxml":0,"sh":1,"bat":0,"gradle":3,"txt":10}},"authorContributionVariance":{"PetrichorPrecipice":487443.4},"authorDisplayNameMap":{"PetrichorPrecipice":"CS2103T-W13-3 WONG..HUNG"}} +{"authorDailyContributionsMap":{"PetrichorPrecipice":[{"date":"2023-08-22","commitResults":[{"hash":"d60c31dfca35ee841ec62df74ecc31940b2e9517","isMergeCommit":false,"messageTitle":"Change Chat Bot name","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"eca0a2cf6d6f78f7cd11e27c192216ab7d507d7e","isMergeCommit":false,"messageTitle":"Added Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}}]},{"date":"2023-08-23","commitResults":[{"hash":"ba1a0b3ffbbf54b19d6f9f1d8255b83f8533144b","isMergeCommit":false,"messageTitle":"Added List class with add, list functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":54,"deletions":5}}},{"hash":"ee2b1df27a29e50ffa401c71cea17dcd043737c4","isMergeCommit":false,"messageTitle":"Added the checking and unchecking of tasks with new Task class","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":100,"deletions":40}}},{"hash":"924724a07c29526fa65d0513a327d5cc5a780363","isMergeCommit":false,"messageTitle":"Added Event, Deadline, ToDo classes","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":13}}},{"hash":"4eadd9d882b89c984fe95f88784169fe61a00a5f","isMergeCommit":false,"messageTitle":"Added Exception Handling","messageBody":"","tags":["Level-5","A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":22}}},{"hash":"036248fe13153ba2219ed418995466c915230624","isMergeCommit":false,"messageTitle":"Added delete functionality and Automated UI Testing","messageBody":"","tags":["Level-6","A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":10,"deletions":0},"java":{"insertions":48,"deletions":26},"sh":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-27","commitResults":[{"hash":"000061e3cb4b69691224e27ecd11516b759cceb0","isMergeCommit":false,"messageTitle":"Added File Storage","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":186,"deletions":10},"md":{"insertions":1,"deletions":1}}}]},{"date":"2023-08-28","commitResults":[{"hash":"0b5a2d3c413ffeaab0297a70ecd95d7934cc651a","isMergeCommit":false,"messageTitle":"Add Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":168,"deletions":30}}}]},{"date":"2023-08-29","commitResults":[{"hash":"007f7b2b8e00d7045071fc7fe74d29c53a1b9377","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":549,"deletions":217}}},{"hash":"cb4c09e7b49931b4e4fa7e59677f9431e990efb0","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Alpha.java\n#\tsrc/main/java/Deadline.java\n#\tsrc/main/java/Event.java\n#\tsrc/main/java/FileHandler.java\n","fileTypesAndContributionMap":{}},{"hash":"118eb7d9330e4a891fb7ab073409598107b17179","isMergeCommit":false,"messageTitle":"Add More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":412,"deletions":220}}},{"hash":"268a26a3b0412e663050a3f54c751bd173e4fdf9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/Alpha.java\n","fileTypesAndContributionMap":{}},{"hash":"e8d4991b6cfae5be25c6616b2e35a8c99aa998c1","isMergeCommit":false,"messageTitle":"Revert \"Add More OOP\"","messageBody":"This reverts commit 118eb7d9330e4a891fb7ab073409598107b17179.\n","fileTypesAndContributionMap":{"java":{"insertions":220,"deletions":412}}},{"hash":"ec37909504f93cf729e50892f63c5b4e0743882d","isMergeCommit":false,"messageTitle":"Remove Unused Import","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":2}}},{"hash":"2be399956bc6f02730e2b2e3b7da008a928d0141","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027 of https://github.com/PetrichorPrecipice/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Alpha.java\n","fileTypesAndContributionMap":{}},{"hash":"f7ed21d0279f98b68510954ac33bc215769894ab","isMergeCommit":true,"messageTitle":"Merge branches \u0027master\u0027 and \u0027master\u0027 of https://github.com/PetrichorPrecipice/ip","messageBody":"# Conflicts:\n#\tsrc/main/java/Alpha.java\n#\tsrc/main/java/Deadline.java\n#\tsrc/main/java/Event.java\n#\tsrc/main/java/FileHandler.java\n","fileTypesAndContributionMap":{}},{"hash":"4d44154befd5a403ebe9ec11f694bd60ff8c0214","isMergeCommit":false,"messageTitle":"Add More OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":358,"deletions":302}}},{"hash":"88274d0cfb72c24d2c831513d4fe9e82876b74b2","isMergeCommit":false,"messageTitle":"Add Package alpha","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":24,"deletions":2}}}]},{"date":"2023-08-30","commitResults":[{"hash":"7c29716632021d2e4e3c3277c22155b29d30f456","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/PetrichorPrecipice/ip","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"268ae3885e89e170ab550f370208c81685cec920","isMergeCommit":false,"messageTitle":"Add JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":3},"java":{"insertions":274,"deletions":151}}},{"hash":"ea22ea036731e616849d7688d1f094df55cb2de8","isMergeCommit":false,"messageTitle":"Add JAR file code","messageBody":"","tags":["v0.1","A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"adbc04c73995e4628abe0293a0ccd1a84865cd6a","isMergeCommit":false,"messageTitle":"Add JavaDoc","messageBody":"","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{"java":{"insertions":223,"deletions":35}}},{"hash":"6db9484fa41e883698c27095cfd8b1d0428d1b73","isMergeCommit":false,"messageTitle":"Tweak code to comply with coding standard","messageBody":"","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{"java":{"insertions":267,"deletions":176}}},{"hash":"a339e77dde934fb72e0a62beab971263cd3decdb","isMergeCommit":false,"messageTitle":"Add Find functionality","messageBody":"","tags":["Level-9"],"fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":10}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ba911501009ef390f1874c043b47906c53941a6b","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"md":{"insertions":29,"deletions":24}}}]}]},"authorFileTypeContributionMap":{"PetrichorPrecipice":{"java":1314,"md":23,"fxml":0,"sh":1,"bat":0,"gradle":3,"txt":10}},"authorContributionVariance":{"PetrichorPrecipice":417433.6},"authorDisplayNameMap":{"PetrichorPrecipice":"CS2103T-W13-3 WONG..HUNG"}} diff --git a/RSXIX_ip_master/authorship.json b/RSXIX_ip_master/authorship.json index af5ab6c8..fe0dd139 100644 --- a/RSXIX_ip_master/authorship.json +++ b/RSXIX_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"[E] | [X] | hw | Dec 13 2023 0100 - Dec 13 2023 0100","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"[D] | [ ] | return book | Dec 13 2023 0100","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"[E] | [ ] | hw | Dec 13 2023 0100 - Dec 13 2023 0100","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"RSXIX":3}},{"path":"src/main/java/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" private String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" String str;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" public DeadlineTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" String[] strArr \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" str \u003d strArr[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" deadline \u003d strArr[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[D] | %s | %s | %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" str, this.dateToString(deadline));","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":21}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" + \"Eh, I\u0027m Scarlet \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" + \"No, I don\u0027t really want to know who you are \\n\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" Duke bot \u003d new Duke();","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" bot.inputsForList();","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" public void inputsForList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" Tasks lst \u003d new Tasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" boolean running \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" while (running) {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" String entry \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" String[] words \u003d entry.split(\" \");","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" if (entry.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" lst.saveTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" + \"finally. \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" running \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" } else if (entry.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" String condemn \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" + \"What a terrible day to be alive. \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" + String.format(\"%s \\n_______________ \\n\", lst);","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" System.out.println(condemn);","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" } else if (words[0].equals(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(words[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" lst.checkItem(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"_______________ \\n\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" + \"A proud moment of your life I am sure... \\n \"","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" + lst.showThisTask(index) + \" \\n\" + \"_______________\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" } else if (words[0].equals(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(words[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" lst.notDoneItem(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"_______________ \\n\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m not juding at all... \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" + lst.showThisTask(index) + \" \\n\" + \"_______________\\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" } else if (words[0].equals(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(words[1]);","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" String placeholder \u003d lst.showThisTask(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" lst.deleteIndex(index);","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"_______________ \\n\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" + \"Not another mistake I hope... \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" + placeholder + \" \\n\\n\" + \"_______________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" boolean exceptionOccured \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" lst.input(entry);","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"_______________ \\n\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" \"Come on now... don\u0027t be shy, go on \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" \"_______________ \\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"_______________ \\n\\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" \"Someone should have paid attention in school... try again \\n\" +","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" \"_______________ \\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" if (!exceptionOccured) {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"_______________ \\n\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m totally not judging... \"","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" + lst.showThisTask(lst.numOfItems())","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" + \" ... added to the list \\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" + \"I wonder how you\u0027ll mess up this... \" + lst.numOfItems() + \"\\n\"","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\");","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"RSXIX":76,"-":4}},{"path":"src/main/java/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":" private String event;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" private String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" private String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" public EventTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" String[] splitsy \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" event \u003d splitsy[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" from \u003d splitsy[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" to \u003d splitsy[2].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[E] | %s | %s | %s - %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" event, this.dateToString(from.trim()), this.dateToString(to.trim()));","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":20}},{"path":"src/main/java/IncompleteInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class IncompleteInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":" public IncompleteInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":5}},{"path":"src/main/java/InvalidInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class InvalidInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":" public InvalidInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":5}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" private Boolean done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" public Task(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" task \u003d input;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" private String type;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" private String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" private String checkBox;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" private String deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" public static Task correctTask(String type, String completion, String item, String deadline) {","lastModifiedDate":"2023-08-31"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" if (type.equals(\"[T] \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" //System.out.println(\"todo \" + item);","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new ToDoTask(item);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" } else if (type.equals(\"[E] \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" String from \u003d deadline.split(\"-\")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" String to \u003d deadline.split(\"-\")[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new EventTask(item.trim() + \" /from \" + from.trim() + \" /to \" + to.trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new DeadlineTask(item.trim() + \" /by \" + deadline.trim());","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" public String formatTime(String time) throws DateTimeParseException {","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" public String dateToString(String time) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d this.formatTime(time);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" return time;","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" return done;","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" return \"[X] \" + \"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" return \"[ ] \" +\"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":86}},{"path":"src/main/java/Tasks.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-08-31"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-08-31"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-08-31"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class Tasks {","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" private ArrayList\u003cTask\u003e storagePile;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" public Tasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" storagePile \u003d Tasks.loadTasks();","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" public void input(String item) throws InvalidInput, IncompleteInput {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" String firstWord \u003d item.split(\" \")[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" if (item.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" if (firstWord.equals(\"todo\") || firstWord.equals(\"deadline\") || firstWord.equals(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" throw new IncompleteInput(\"X\");","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"X\");","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new ToDoTask(task));","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new DeadlineTask(task));","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new EventTask(task));","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" private static final String path \u003d \"./data/data.txt\";","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" public void saveTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" PrintWriter writer \u003d new PrintWriter(new FileWriter(file));","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" for (Task item : storagePile) {","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" String str \u003d item.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" writer.println(str);","lastModifiedDate":"2023-08-31"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" writer.close();","lastModifiedDate":"2023-08-31"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-08-31"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" };","lastModifiedDate":"2023-08-31"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" public static ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(path));","lastModifiedDate":"2023-08-31"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" String line \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" //System.out.println(\"What is pulled when I load\");","lastModifiedDate":"2023-08-31"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" //System.out.println(line);","lastModifiedDate":"2023-08-31"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" List\u003cString\u003e splitsy \u003d new ArrayList\u003c\u003e(Arrays.asList(line.split(\"\\\\| \")));","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" if (splitsy.size() \u003c 4) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" splitsy.add(\"hi\");","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" tasks.add(Task.correctTask(splitsy.get(0), splitsy.get(1), splitsy.get(2), splitsy.get(3)));","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"File\");","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-08-31"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" int leng \u003d storagePile.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":" String listed \u003d \"\";","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":" for (int i \u003d 1; i \u003c\u003d leng; i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":" listed +\u003d String.format(\"%s - %s\",","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"RSXIX"},"content":" i, storagePile.get(i-1)) +\" \\n\" ;","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"RSXIX"},"content":" return listed;","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"RSXIX"},"content":" public void checkItem(int x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markDone();","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"RSXIX"},"content":" public void notDoneItem(int x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markUndone();","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"RSXIX"},"content":" public void deleteIndex(int x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"RSXIX"},"content":" storagePile.remove(x-1);","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"RSXIX"},"content":" public String showThisTask(int x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"RSXIX"},"content":" return storagePile.get(x-1).toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"RSXIX"},"content":" public int numOfItems() {","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"RSXIX"},"content":" return storagePile.size();","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":111}},{"path":"src/main/java/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":" public ToDoTask(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" return \"[T] \" + \"| \" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":11}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":1}}] +[{"path":"data/data.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"[E] | [X] | hw | Dec 13 2023 0100 - Dec 13 2023 0100","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"[D] | [ ] | return book | Dec 13 2023 0100","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"RSXIX":2}},{"path":"src/main/java/DeadlineTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class DeadlineTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" private String by;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" String str;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" String deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" public DeadlineTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" String[] strArr \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" str \u003d strArr[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" deadline \u003d strArr[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[D] | %s | %s | %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" str, Parser.dateToString(deadline));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":21}},{"path":"src/main/java/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" Ui.printWelcome();","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" Ui iu \u003d new Ui();","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" Parser her \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" TaskList tasks \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" boolean running \u003d true;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" while (running) {","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" String entry \u003d sc.nextLine();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" running \u003d her.inputs(entry, tasks, iu);","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":13,"-":4}},{"path":"src/main/java/EventTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class EventTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":" private String event;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" private String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" private String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" public EventTask(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" String[] splitsy \u003d task.split(\"/\");","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" event \u003d splitsy[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" from \u003d splitsy[1].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" to \u003d splitsy[2].split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" return String.format(\"[E] | %s | %s | %s - %s\",","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" this.isDone() ? \"[X]\" : \"[ ]\",","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" event, Parser.dateToString(from.trim()), Parser.dateToString(to.trim()));","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":20}},{"path":"src/main/java/IncompleteInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class IncompleteInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":" public IncompleteInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":5}},{"path":"src/main/java/InvalidInput.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class InvalidInput extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":" public InvalidInput(String x) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" super(x);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":5}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"public class Parser {","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" public Parser() {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" public boolean inputs(String input, TaskList tasks, Ui iu) {","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" String[] listOfWords \u003d input.split(\" \");","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" String prefix \u003d listOfWords[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" boolean future \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" if (input.equals(\"bye\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" Storage.saveTasks(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" Ui.printBye();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" future \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" } else if (input.equals(\"list\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" iu.printList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"mark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" tasks.checkItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" iu.printMarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"unmark\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" tasks.notDoneItem(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" iu.printUnmarked(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" } else if (prefix.equals(\"delete\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" int index \u003d Integer.parseInt(listOfWords[1]);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" if (index \u003c 1 || index \u003e tasks.numOfItems()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"False Index\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" iu.printDelete(tasks, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" tasks.deleteIndex(index);","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" boolean exceptionOccured \u003d false;","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" tasks.input(input);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" } catch (IncompleteInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" iu.printTaskWithoutDescription();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" exceptionOccured \u003d true;","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" iu.printNonsense();","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" if (!exceptionOccured) {","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" iu.printAddedToList(tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" } catch (InvalidInput e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" iu.printWrongIndex();","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" } finally {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" return future;","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" public String formatTime(String time) throws DateTimeParseException {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(time, formatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" DateTimeFormatter outputFormatter \u003d DateTimeFormatter.ofPattern(\"MMM d yyyy HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dateTime.format(outputFormatter);","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"RSXIX"},"content":" public static String dateToString(String time) {","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"RSXIX"},"content":" Parser dud \u003d new Parser();","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"RSXIX"},"content":" String formattedStringOutput \u003d dud.formatTime(time);","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"RSXIX"},"content":" return formattedStringOutput;","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"RSXIX"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"RSXIX"},"content":" return time;","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":91}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" private static final String path \u003d \"./data/data.txt\";","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" public static void saveTasks(TaskList x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" File file \u003d new File(path);","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" PrintWriter writer \u003d new PrintWriter(new FileWriter(file));","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" x.saveToFile(writer);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" writer.close();","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" public static ArrayList\u003cTask\u003e loadTasks() {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" BufferedReader reader \u003d new BufferedReader(new FileReader(path));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" String line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" while (line !\u003d null) {","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" List\u003cString\u003e splitsy \u003d new ArrayList\u003c\u003e(Arrays.asList(line.split(\"\\\\| \")));","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" if (splitsy.size() \u003c 4) {","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" splitsy.add(\"hi\");","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" tasks.add(Storage.correctTask(splitsy.get(0), splitsy.get(1), splitsy.get(2), splitsy.get(3)));","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" line \u003d reader.readLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"File\");","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" System.out.println(\"IO\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" public static Task correctTask(String type, String completion, String item, String deadline) {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" if (type.equals(\"[T] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new ToDoTask(item);","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" } else if (type.equals(\"[E] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" String from \u003d deadline.split(\"-\")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" String to \u003d deadline.split(\"-\")[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new EventTask(item.trim() + \" /from \" + from.trim() + \" /to \" + to.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" Task t \u003d new DeadlineTask(item.trim() + \" /by \" + deadline.trim());","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" if (completion.equals(\"[X] \")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" t.markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":" return t;","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":79}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" private Boolean done \u003d false;","lastModifiedDate":"2023-08-31"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" public Task(String input) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" task \u003d input;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" private String type;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" private String desc;","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" private String checkBox;","lastModifiedDate":"2023-08-31"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" private String deadline;","lastModifiedDate":"2023-08-31"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" public void markDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" done \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" public void markUndone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" protected boolean isDone() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":" return done;","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" if (done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" return \"[X] \" + \"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" return \"[ ] \" +\"| \" + task;","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":42}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"import java.io.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"import java.util.List;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"public class TaskList {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" private ArrayList\u003cTask\u003e storagePile;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" storagePile \u003d Storage.loadTasks();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" int leng \u003d storagePile.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" String listed \u003d \"\";","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":" for (int i \u003d 1; i \u003c\u003d leng; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" listed +\u003d String.format(\"%s - %s\",","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" i, storagePile.get(i-1)) +\" \\n\" ;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" return listed;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":" public void checkItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" public void notDoneItem(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" storagePile.get(x-1).markUndone();","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" public void deleteIndex(int x) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" storagePile.remove(x-1);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" public Task getTask(int x) { return storagePile.get(x-1); }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" public int numOfItems() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" return storagePile.size();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" public void input(String item) throws InvalidInput, IncompleteInput {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":" String firstWord \u003d item.split(\" \")[0];","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" if (item.split(\" \").length \u003d\u003d 1) {","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" if (firstWord.equals(\"todo\") || firstWord.equals(\"deadline\") || firstWord.equals(\"event\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" throw new IncompleteInput(\"Not finished\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":" throw new InvalidInput(\"Invalid\");","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"todo\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new ToDoTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" } else if (firstWord.equals(\"deadline\")) {","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new DeadlineTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" } else {","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" String task \u003d item.split(\" \", 2)[1];","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" storagePile.add(new EventTask(task));","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" public void saveToFile(PrintWriter pw) {","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" for (Task item : storagePile) {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" String str \u003d item.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" pw.println(str);","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":70}},{"path":"src/main/java/ToDoTask.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class ToDoTask extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":" public ToDoTask(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" super(name);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" return \"[T] \" + \"| \" + super.toString();","lastModifiedDate":"2023-08-31"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":10}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"public class Ui {","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"RSXIX"},"content":" public Ui() {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"RSXIX"},"content":" private final String upper \u003d \"_______________ \\n\\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"RSXIX"},"content":" private final String lower \u003d \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"RSXIX"},"content":" public static void printWelcome() {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"RSXIX"},"content":" + \"Eh, I\u0027m Scarlet \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"RSXIX"},"content":" + \"No, I don\u0027t really want to know who you are \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"RSXIX"},"content":" public static void printBye() {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"RSXIX"},"content":" String logo \u003d \"_______________ \\n\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"RSXIX"},"content":" + \"finally. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"RSXIX"},"content":" + \"_______________ \\n\";","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"RSXIX"},"content":" System.out.println(logo);","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"RSXIX"},"content":" public void printList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"RSXIX"},"content":" String condemn \u003d upper","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"RSXIX"},"content":" + \"What a terrible day to be alive. \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"RSXIX"},"content":" + String.format(\"%s \\n_______________ \\n\", tasks);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"RSXIX"},"content":" System.out.println(condemn);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"RSXIX"},"content":" public void printMarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"RSXIX"},"content":" + \"A proud moment of your life I am sure... \\n \"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"RSXIX"},"content":" public void printUnmarked(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m not juding at all... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"RSXIX"},"content":" public void printDelete(TaskList tasks, int index) {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"RSXIX"},"content":" System.out.println( upper","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"RSXIX"},"content":" + \"Not another mistake I hope... \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(index) + \" \\n\\n\" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"RSXIX"},"content":" public void printTaskWithoutDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"RSXIX"},"content":" \"Come on now... don\u0027t be shy, go on \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"RSXIX"},"content":" lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"RSXIX"},"content":" public void printNonsense() {","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper +","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"RSXIX"},"content":" \"Someone should have paid attention in school... try again \\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"RSXIX"},"content":" lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"RSXIX"},"content":" public void printAddedToList(TaskList tasks) {","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"RSXIX"},"content":" + \"I\u0027m totally not judging... \"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"RSXIX"},"content":" + tasks.getTask(tasks.numOfItems())","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"RSXIX"},"content":" + \" ... added to the list \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"RSXIX"},"content":" + \"I wonder how you\u0027ll mess up this... \" + tasks.numOfItems() + \"\\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"RSXIX"},"content":" public void printWrongIndex() {","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"RSXIX"},"content":" System.out.println(upper","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"RSXIX"},"content":" + \"1 mama and 1 papa made 2 dummies \\n\"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"RSXIX"},"content":" + lower);","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"RSXIX"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"RSXIX"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"RSXIX"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"RSXIX":77}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"RSXIX"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"RSXIX":1}}] diff --git a/RSXIX_ip_master/commits.json b/RSXIX_ip_master/commits.json index d756ad97..1b1506e0 100644 --- a/RSXIX_ip_master/commits.json +++ b/RSXIX_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"RSXIX":[{"date":"2023-08-24","commitResults":[{"hash":"9e71e15ea7a2140d0a8952b731b749afeb1b197d","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"2f16bcfcb77a8bb8ac93bf4d0832a60f59aac9ad","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}},{"hash":"34da41e81236a8c024a38f2f8b52fa9926b7e56d","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["List-2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"fbb31c32d0b5214fe3858b9a3f77be0dbe248e06","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":4}}},{"hash":"9155d05b58ef4bb9b5b5b5866c886cf402851643","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":13}}},{"hash":"f09c6d482d8eadbe853c614a40788ee676c2c4c5","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":67,"deletions":31}}},{"hash":"e6273cab7af97fe7507a0dfb59bad2946e6425bd","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"baafd366496e4341bb94a408811e58d6b8370909","isMergeCommit":false,"messageTitle":"Logically seems fine to me but not saving yet....","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":10}}},{"hash":"b44b6eabd1dae880049b2ccfb4f23579874589a9","isMergeCommit":false,"messageTitle":"Finished Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":28}}},{"hash":"f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29","isMergeCommit":false,"messageTitle":"Merged with Level-7 Branch having Completed Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"7e1e7e241228c3cbacb05da9fd65abe6a7821f3a","isMergeCommit":false,"messageTitle":"Revert \"Merged with Level-7 Branch having Completed Level-7\"","messageBody":"This reverts commit f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"36685defb34d2880bbb721fcf07a63f40f917afc","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Merged with Level-7 Branch having Completed Level-7\"\"","messageBody":"This reverts commit 7e1e7e241228c3cbacb05da9fd65abe6a7821f3a.\n\nMade a mistake\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"ca411b2d804038e501e723f2c4b02c2d0b7598f8","isMergeCommit":true,"messageTitle":"Before Merge","messageBody":"","tags":["“Level-7”"],"fileTypesAndContributionMap":{}},{"hash":"7ca9565bfaaeb5e2808cc42065232b692ae9066b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"Seemed to be an issue\n","fileTypesAndContributionMap":{}},{"hash":"785e258ecb31c30a70d8a39341f75a4479d15768","isMergeCommit":false,"messageTitle":"Completed Level-8","messageBody":"","tags":["Merge-Level-8","Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":25,"deletions":4}}}]}]},"authorFileTypeContributionMap":{"RSXIX":{"java":335,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":4}},"authorContributionVariance":{"RSXIX":8847.528},"authorDisplayNameMap":{"RSXIX":"CS2103T-W16-3 ROHA..APRA"}} +{"authorDailyContributionsMap":{"RSXIX":[{"date":"2023-08-24","commitResults":[{"hash":"9e71e15ea7a2140d0a8952b731b749afeb1b197d","isMergeCommit":false,"messageTitle":"Completed Level-0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}},{"hash":"2f16bcfcb77a8bb8ac93bf4d0832a60f59aac9ad","isMergeCommit":false,"messageTitle":"Completed Level-1","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":4}}},{"hash":"34da41e81236a8c024a38f2f8b52fa9926b7e56d","isMergeCommit":false,"messageTitle":"Completed Level-2","messageBody":"","tags":["List-2","Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":40,"deletions":7}}},{"hash":"fbb31c32d0b5214fe3858b9a3f77be0dbe248e06","isMergeCommit":false,"messageTitle":"Completed Level-3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":4}}},{"hash":"9155d05b58ef4bb9b5b5b5866c886cf402851643","isMergeCommit":false,"messageTitle":"Completed Level-4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":77,"deletions":13}}},{"hash":"f09c6d482d8eadbe853c614a40788ee676c2c4c5","isMergeCommit":false,"messageTitle":"Completed Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":67,"deletions":31}}},{"hash":"e6273cab7af97fe7507a0dfb59bad2946e6425bd","isMergeCommit":false,"messageTitle":"Completed Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":0}}}]},{"date":"2023-08-31","commitResults":[{"hash":"baafd366496e4341bb94a408811e58d6b8370909","isMergeCommit":false,"messageTitle":"Logically seems fine to me but not saving yet....","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":10}}},{"hash":"b44b6eabd1dae880049b2ccfb4f23579874589a9","isMergeCommit":false,"messageTitle":"Finished Level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":28}}},{"hash":"f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29","isMergeCommit":false,"messageTitle":"Merged with Level-7 Branch having Completed Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"7e1e7e241228c3cbacb05da9fd65abe6a7821f3a","isMergeCommit":false,"messageTitle":"Revert \"Merged with Level-7 Branch having Completed Level-7\"","messageBody":"This reverts commit f0982afb694c6c27fbc24b7c50d20b0fcdaa3e29.\n","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"36685defb34d2880bbb721fcf07a63f40f917afc","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Merged with Level-7 Branch having Completed Level-7\"\"","messageBody":"This reverts commit 7e1e7e241228c3cbacb05da9fd65abe6a7821f3a.\n\nMade a mistake\n","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0}}},{"hash":"ca411b2d804038e501e723f2c4b02c2d0b7598f8","isMergeCommit":true,"messageTitle":"Before Merge","messageBody":"","tags":["“Level-7”"],"fileTypesAndContributionMap":{}},{"hash":"7ca9565bfaaeb5e2808cc42065232b692ae9066b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"Seemed to be an issue\n","fileTypesAndContributionMap":{}},{"hash":"785e258ecb31c30a70d8a39341f75a4479d15768","isMergeCommit":false,"messageTitle":"Completed Level-8","messageBody":"","tags":["Merge-Level-8","Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":3},"java":{"insertions":25,"deletions":4}}}]},{"date":"2023-09-03","commitResults":[{"hash":"70f02a214db05a8b5f7cc0512e9f6c3de5422f03","isMergeCommit":false,"messageTitle":"Completed A-MoreOOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":1},"java":{"insertions":326,"deletions":228}}}]}]},"authorFileTypeContributionMap":{"RSXIX":{"java":433,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":0,"txt":3}},"authorContributionVariance":{"RSXIX":22857.072},"authorDisplayNameMap":{"RSXIX":"CS2103T-W16-3 ROHA..APRA"}} diff --git a/RoeReRe_ip_master/authorship.json b/RoeReRe_ip_master/authorship.json index e193e416..1bd50ca3 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":"-"},"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":"RoeReRe"},"content":" mainClass.set(\"duke.Duke\")","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"RoeReRe":1,"-":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":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" this.ui \u003d new Ui(this);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" this.tasks \u003d new TaskList(storage.readFromDatabase(), this);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" this.ui.showError(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" this.tasks \u003d new TaskList(new ArrayList\u003cTask\u003e(), this);","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" * Driver function to start the bot.","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" public void run() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" ui.printIntro();","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" ui.promptInput();","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"RoeReRe":37,"-":3}},{"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":" BYE(\"bye\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" LIST(\"list\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" MARK(\"mark\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" FIND(\"find\");","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" private final String text;","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" Command(final String text) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" return this.text;","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":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" * Processes the user input and calls the relevant background functions.","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" * @param userInput The raw input entered by the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" * @param dukeBot The context.","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" * @return A Command enum that states the user command entered.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" * @throws DukeException If invalid input.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" public static Command processInput(String userInput, Duke dukeBot) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" String[] inputArray \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" Command userCommand \u003d Command.valueOf(inputArray[0].toUpperCase());","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" String inputInfo \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" if (inputArray.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" inputInfo \u003d inputArray[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" switch (userCommand) {","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" case BYE:","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" case LIST:","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.listTasks();","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" case MARK:","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.markTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":" case UNMARK:","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.unmarkTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" case DELETE:","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.deleteTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" case TODO: {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d inputInfo;","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Todo(taskName);","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" case DEADLINE: {","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d inputInfo.split(\" /by \");","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo.length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d taskInfo[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" String deadline \u003d taskInfo[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" case EVENT: {","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d inputInfo.split(\" /from \");","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo.length !\u003d 2 || taskInfo[1].split(\"/to\").length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d taskInfo[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" String startTime \u003d taskInfo[1].split(\" /to \")[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" String endTime \u003d taskInfo[1].split(\" /to \")[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":" case FIND:","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.findTasks(inputInfo);","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":" return userCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":111}},{"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":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":" FileWriter writer \u003d new FileWriter(DATABASE_PATH.toString(), false);","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(writer);","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.write(task.toDatabaseRepresentation());","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.newLine();","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":" bufferedWriter.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"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":" private static Task stringToTask(String line) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" Task newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"RoeReRe"},"content":" switch (taskInfo[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"RoeReRe"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Todo(taskInfo[2]);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"RoeReRe"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Deadline(taskInfo[2], taskInfo[3]);","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"RoeReRe"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Event(taskInfo[2], taskInfo[3], taskInfo[4]);","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"RoeReRe"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"Database is corrupted.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo[1].equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"RoeReRe"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"RoeReRe"},"content":" return newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"RoeReRe"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"RoeReRe"},"content":" }","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":" * Converts a predefined format of string to LocalDateTime.","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"RoeReRe"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"RoeReRe"},"content":" * @return The LocalDateTime containing the date written in the input.","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"RoeReRe"},"content":" public static LocalDateTime stringToDate(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"RoeReRe"},"content":" return LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"RoeReRe"},"content":" * Converts LocalDateTime to a format that is more tilable in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"RoeReRe"},"content":" * @param date The date to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"RoeReRe"},"content":" * @return The database representation of the date inputted.","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"RoeReRe"},"content":" public static String dateToDatabaseRepresentation(LocalDateTime date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"RoeReRe"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"RoeReRe"},"content":" * Converts LocalDateTime to a format that is more readable.","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"RoeReRe"},"content":" * @param date The date to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"RoeReRe"},"content":" * @return Date in a more readable format.","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"RoeReRe"},"content":" public static String dateToString(LocalDateTime date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy, hh:mma\");","lastModifiedDate":"2023-08-26"},{"lineNumber":167,"author":{"gitId":"RoeReRe"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":168,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":169}},{"path":"src/main/java/duke/Ui.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":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" * Ui is responsible for prompting the user for input.","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" * It also contains general methods to output information to the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" private Duke dukeBot;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" public Scanner scannerObj \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" * Latest user input is saved in a static field.","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" public String userInput;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" public Ui(Duke dukeBot) {","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":" * Prints a standard introduction of Duke bot.","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" public static void printIntro() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"Hello! I\u0027m Roe!\\n\" + \"What can I do for you?\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" }","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":" * Prints a goodbye message.","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" public static void printEnd() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" * Prints a horizontal line. To be used by different classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" public static void printLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" int LINE_LENGTH \u003d 50;","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" for (int i \u003d 0; i \u003c LINE_LENGTH; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" System.out.print(\"─\");","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" System.out.print(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" * Prints an exception in a predefined format.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" * @param e The exception to be printed.","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" public static void showError(DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" * Repeatedly prompts the user for input until a \"bye\" is inputted.","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" * @return The latest input by the user. To be cached.","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" public String promptInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" do {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" System.out.println();","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" userInput \u003d scannerObj.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" System.out.println();","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" } while (Parser.processInput(userInput, dukeBot) !\u003d Parser.Command.BYE);","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" printEnd();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" promptInput();","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" return userInput;","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":87}},{"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-08-19"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), Storage.dateToString(this.deadline));","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":28}},{"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-08-19"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" super.toString(), Storage.dateToString(startTime), Storage.dateToString(endTime));","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":32}},{"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":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"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":5,"author":{"gitId":"RoeReRe"},"content":" * It also manages the list of tasks in a local database.","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" private String taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d false;","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":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" * Turns the task into a string that can be stored in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" * @return The task information in the form of a string.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" public abstract String toDatabaseRepresentation();","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" protected void markAsUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d false;","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":" protected boolean isDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" return isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" protected String getTaskName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" return this.taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" return this.isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"%s %s\", this.getStatusIcon(), this.getTaskName());","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":46}},{"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.Ui;","lastModifiedDate":"2023-08-26"},{"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":"","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"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":10,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" * List of all tasks added.","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" private Duke dukeBot;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Duke dukeBot) {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" this.dukeBot \u003d dukeBot;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" }","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":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" Ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" System.out.println(task.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" System.out.printf(\"Now you have %s tasks in the list.%n\", taskList.size());","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" Ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","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":" * Marks a task as done.","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" public void markTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" taskList.get(i - 1).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" Ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" System.out.println(taskList.get(i - 1).toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" public void unmarkTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" taskList.get(i - 1).markAsUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" System.out.println(taskList.get(i - 1).toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" public void deleteTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" Task removedTask \u003d taskList.remove(i - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" Ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" System.out.println(removedTask.toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" System.out.printf(\"Now you have %s tasks in the list.%n\", taskList.size());","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" * Lists out all the tasks that are in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" Ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" System.out.printf(\"%s.%s%n\", i + 1, taskList.get(i).toString());","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":" Ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"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":" * Prints all tasks with names strictly containing a keyword.","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" * @param key The keyword.","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" public void findTasks(String key) {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" Ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-08-26"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":" if (task.getTaskName().contains(key)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" System.out.printf(\"%s. %s%n\", count++, task);","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"RoeReRe"},"content":" Ui.printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":109}},{"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/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":"-"},"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":" private Ui ui;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" this.ui \u003d new Ui(this);","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" this.storage \u003d new Storage(filePath);","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-20"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" this.tasks \u003d new TaskList(storage.readFromDatabase(), this);","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-19"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" this.ui.showError(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" this.tasks \u003d new TaskList(new ArrayList\u003cTask\u003e(), this);","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" * Driver function to start the bot on a text-based UI.","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" public void run() {","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" ui.printIntro();","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" ui.promptInput();","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" new Duke(\"data/duke.txt\").run();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"RoeReRe":37,"-":3}},{"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":" * @param text The text to be outputted.","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" * @param isUser Decides whether the output is to be printed on the LHS or RHS.","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" public static void outputDialog(String text, boolean isUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" HBox newDialog \u003d formatDialog(text, isUser);","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" dialogContainer.getChildren().add(newDialog);","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" }","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":" * Outputs a string into the GUI. The source is assumed to be Duke.","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" * @param text The text to be outputted.","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" public static void outputDialog(String text) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" outputDialog(text, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" private static HBox formatDialog(String text, boolean isUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" Label textToAdd \u003d new Label(text);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" textToAdd.setFont(new Font(\"Calibri Light\", 18));","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" textToAdd.getStyleClass().add(\"dialog\");","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" textToAdd.setWrapText(true);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" textToAdd.setMaxWidth(250);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" HBox dialogBox \u003d new HBox(textToAdd);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" if (isUser) {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":" dialogBox.setAlignment(Pos.TOP_RIGHT);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" dialogBox.setAlignment(Pos.TOP_LEFT);","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" return dialogBox;","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RoeReRe":100}},{"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":" MARK(\"mark\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" UNMARK(\"unmark\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" DELETE(\"delete\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" TODO(\"todo\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" DEADLINE(\"deadline\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" EVENT(\"event\"),","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" FIND(\"find\");","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" private final String text;","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" Command(final String text) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" this.text \u003d text;","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" @Override","lastModifiedDate":"2023-08-26"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" return this.text;","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":"","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" * Processes the user input and calls the relevant background functions.","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" * @param userInput The raw input entered by the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" * @param dukeBot The context.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" * @return A Command enum that states the user command entered.","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" * @throws DukeException If invalid input.","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" public static Command processInput(String userInput, Duke dukeBot) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" String[] inputArray \u003d userInput.split(\" \", 2);","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" Command userCommand \u003d Command.INVALID;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" for (Command command : Command.values()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":" if (command.toString().equals(inputArray[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" userCommand \u003d command;","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":" String inputInfo \u003d \"\";","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" if (inputArray.length \u003d\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" inputInfo \u003d inputArray[1];","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":" switch (userCommand) {","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":" case BYE:","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" case LIST:","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.listTasks();","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" case MARK:","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.markTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" case UNMARK:","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.unmarkTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" case DELETE:","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.deleteTask(Integer.parseInt(inputInfo));","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" case TODO: {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d inputInfo;","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Todo(taskName);","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" case DEADLINE: {","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d inputInfo.split(\" /by \");","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo.length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":" String taskName \u003d taskInfo[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" String deadline \u003d taskInfo[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":93,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Deadline(taskName, deadline);","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" case EVENT: {","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d inputInfo.split(\" /from \");","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo.length !\u003d 2 || taskInfo[1].split(\"/to\").length !\u003d 2) {","lastModifiedDate":"2023-08-26"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"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":" String taskName \u003d taskInfo[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" String startTime \u003d taskInfo[1].split(\" /to \")[0];","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" String endTime \u003d taskInfo[1].split(\" /to \")[1];","lastModifiedDate":"2023-08-26"},{"lineNumber":107,"author":{"gitId":"RoeReRe"},"content":" Task newTask \u003d new Event(taskName, startTime, endTime);","lastModifiedDate":"2023-08-26"},{"lineNumber":108,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.addTask(newTask);","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":" case FIND:","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":" dukeBot.tasks.findTasks(inputInfo);","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"RoeReRe"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"RoeReRe"},"content":" return userCommand;","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":119}},{"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":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":94,"author":{"gitId":"RoeReRe"},"content":" FileWriter writer \u003d new FileWriter(DATABASE_PATH.toString(), false);","lastModifiedDate":"2023-08-26"},{"lineNumber":95,"author":{"gitId":"RoeReRe"},"content":" BufferedWriter bufferedWriter \u003d new BufferedWriter(writer);","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.write(task.toDatabaseRepresentation());","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" bufferedWriter.newLine();","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":" bufferedWriter.close();","lastModifiedDate":"2023-08-26"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"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":" private static Task stringToTask(String line) throws DukeException {","lastModifiedDate":"2023-08-26"},{"lineNumber":109,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" Task newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":" String[] taskInfo \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":113,"author":{"gitId":"RoeReRe"},"content":" switch (taskInfo[0]) {","lastModifiedDate":"2023-08-26"},{"lineNumber":114,"author":{"gitId":"RoeReRe"},"content":" case \"T\":","lastModifiedDate":"2023-08-26"},{"lineNumber":115,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Todo(taskInfo[2]);","lastModifiedDate":"2023-08-26"},{"lineNumber":116,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":117,"author":{"gitId":"RoeReRe"},"content":" case \"D\":","lastModifiedDate":"2023-08-26"},{"lineNumber":118,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Deadline(taskInfo[2], taskInfo[3]);","lastModifiedDate":"2023-08-26"},{"lineNumber":119,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":120,"author":{"gitId":"RoeReRe"},"content":" case \"E\":","lastModifiedDate":"2023-08-26"},{"lineNumber":121,"author":{"gitId":"RoeReRe"},"content":" newTask \u003d new Event(taskInfo[2], taskInfo[3], taskInfo[4]);","lastModifiedDate":"2023-08-26"},{"lineNumber":122,"author":{"gitId":"RoeReRe"},"content":" break;","lastModifiedDate":"2023-08-26"},{"lineNumber":123,"author":{"gitId":"RoeReRe"},"content":" default:","lastModifiedDate":"2023-08-26"},{"lineNumber":124,"author":{"gitId":"RoeReRe"},"content":" throw new DukeException(\"Database is corrupted.\");","lastModifiedDate":"2023-08-26"},{"lineNumber":125,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":126,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":127,"author":{"gitId":"RoeReRe"},"content":" if (taskInfo[1].equals(\"1\")) {","lastModifiedDate":"2023-08-26"},{"lineNumber":128,"author":{"gitId":"RoeReRe"},"content":" newTask.markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":129,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":130,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":131,"author":{"gitId":"RoeReRe"},"content":" return newTask;","lastModifiedDate":"2023-08-26"},{"lineNumber":132,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":133,"author":{"gitId":"RoeReRe"},"content":" throw e;","lastModifiedDate":"2023-08-26"},{"lineNumber":134,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":135,"author":{"gitId":"RoeReRe"},"content":" }","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":" * Converts a predefined format of string to LocalDateTime.","lastModifiedDate":"2023-08-26"},{"lineNumber":139,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":140,"author":{"gitId":"RoeReRe"},"content":" * @param input The user input.","lastModifiedDate":"2023-08-26"},{"lineNumber":141,"author":{"gitId":"RoeReRe"},"content":" * @return The LocalDateTime containing the date written in the input.","lastModifiedDate":"2023-08-26"},{"lineNumber":142,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":143,"author":{"gitId":"RoeReRe"},"content":" public static LocalDateTime stringToDate(String input) {","lastModifiedDate":"2023-08-26"},{"lineNumber":144,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":145,"author":{"gitId":"RoeReRe"},"content":" return LocalDateTime.parse(input, formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":146,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":147,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":148,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":149,"author":{"gitId":"RoeReRe"},"content":" * Converts LocalDateTime to a format that is more tilable in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":150,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":151,"author":{"gitId":"RoeReRe"},"content":" * @param date The date to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":152,"author":{"gitId":"RoeReRe"},"content":" * @return The database representation of the date inputted.","lastModifiedDate":"2023-08-26"},{"lineNumber":153,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":154,"author":{"gitId":"RoeReRe"},"content":" public static String dateToDatabaseRepresentation(LocalDateTime date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":155,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-08-26"},{"lineNumber":156,"author":{"gitId":"RoeReRe"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":157,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":158,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":159,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":160,"author":{"gitId":"RoeReRe"},"content":" * Converts LocalDateTime to a format that is more readable.","lastModifiedDate":"2023-08-26"},{"lineNumber":161,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":162,"author":{"gitId":"RoeReRe"},"content":" * @param date The date to be converted.","lastModifiedDate":"2023-08-26"},{"lineNumber":163,"author":{"gitId":"RoeReRe"},"content":" * @return Date in a more readable format.","lastModifiedDate":"2023-08-26"},{"lineNumber":164,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":165,"author":{"gitId":"RoeReRe"},"content":" public static String dateToString(LocalDateTime date) {","lastModifiedDate":"2023-08-26"},{"lineNumber":166,"author":{"gitId":"RoeReRe"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd MMM yyyy, hh:mma\");","lastModifiedDate":"2023-08-26"},{"lineNumber":167,"author":{"gitId":"RoeReRe"},"content":" return date.format(formatter);","lastModifiedDate":"2023-08-26"},{"lineNumber":168,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":169,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":169}},{"path":"src/main/java/duke/Ui.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":"","lastModifiedDate":"2023-08-26"},{"lineNumber":5,"author":{"gitId":"RoeReRe"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" * Ui is responsible for prompting the user for input for a text-based UI.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" * It also contains general methods to output information to the user.","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":"public class Ui {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" private Duke dukeBot;","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" public Scanner scannerObj \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" * Latest user input is saved in a static field.","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" public String userInput;","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" public Ui(Duke dukeBot) {","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":" * Prints a standard introduction of Duke bot.","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" public static void printIntro() {","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"Hello! I\u0027m Roe!\\n\" + \"What can I do for you?\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" }","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":" * Prints a goodbye message.","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" public static void printEnd() {","lastModifiedDate":"2023-08-26"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" System.out.println(\"Bye. Hope to see you again soon!\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" * Prints a horizontal line. To be used by different classes.","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" public static void printLine() {","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":" int LINE_LENGTH \u003d 50;","lastModifiedDate":"2023-08-26"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" for (int i \u003d 0; i \u003c LINE_LENGTH; i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" System.out.print(\"─\");","lastModifiedDate":"2023-08-26"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" System.out.print(\"\\n\");","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" * Prints an exception in a predefined format.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" * @param e The exception to be printed.","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" public static void showError(DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":" * Repeatedly prompts the user for input until a \"bye\" is inputted.","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" * @return The latest input by the user. To be cached.","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" public String promptInput() {","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" try {","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" do {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" System.out.println();","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":" userInput \u003d scannerObj.nextLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" System.out.println();","lastModifiedDate":"2023-08-26"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" } while (Parser.processInput(userInput, dukeBot) !\u003d Parser.Command.BYE);","lastModifiedDate":"2023-08-26"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" printEnd();","lastModifiedDate":"2023-08-26"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":" printLine();","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" promptInput();","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" return userInput;","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":87}},{"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-08-19"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"[D]%s (by: %s)\", super.toString(), Storage.dateToString(this.deadline));","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":28}},{"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-08-19"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"[E]%s (from: %s to: %s)\",","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" super.toString(), Storage.dateToString(startTime), Storage.dateToString(endTime));","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":32}},{"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":"/**","lastModifiedDate":"2023-08-19"},{"lineNumber":4,"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":5,"author":{"gitId":"RoeReRe"},"content":" * It also manages the list of tasks in a local database.","lastModifiedDate":"2023-08-26"},{"lineNumber":6,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-19"},{"lineNumber":7,"author":{"gitId":"RoeReRe"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-26"},{"lineNumber":8,"author":{"gitId":"RoeReRe"},"content":" private String taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-19"},{"lineNumber":10,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":11,"author":{"gitId":"RoeReRe"},"content":" public Task(String taskName) {","lastModifiedDate":"2023-08-19"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" this.taskName \u003d taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d false;","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":" /**","lastModifiedDate":"2023-08-19"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" * Turns the task into a string that can be stored in the database.","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" * @return The task information in the form of a string.","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" public abstract String toDatabaseRepresentation();","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" protected void markAsUndone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" this.isDone \u003d false;","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":" protected boolean isDone() {","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" return isDone;","lastModifiedDate":"2023-08-26"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" protected String getTaskName() {","lastModifiedDate":"2023-08-26"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" return this.taskName;","lastModifiedDate":"2023-08-19"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" private String getStatusIcon() {","lastModifiedDate":"2023-08-19"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" return this.isDone ? \"[X]\" : \"[ ]\";","lastModifiedDate":"2023-08-19"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-19"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" public String toString() {","lastModifiedDate":"2023-08-19"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" return String.format(\"%s %s\", this.getStatusIcon(), this.getTaskName());","lastModifiedDate":"2023-08-19"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-19"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-19"}],"authorContributionMap":{"RoeReRe":46}},{"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":"import duke.Ui;","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-26"},{"lineNumber":9,"author":{"gitId":"RoeReRe"},"content":"/**","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"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":11,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":"public class TaskList {","lastModifiedDate":"2023-08-26"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" * List of all tasks added.","lastModifiedDate":"2023-08-26"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" private Duke dukeBot;","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":19,"author":{"gitId":"RoeReRe"},"content":" public TaskList(ArrayList\u003cTask\u003e taskList, Duke dukeBot) {","lastModifiedDate":"2023-08-26"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-26"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" this.dukeBot \u003d dukeBot;","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":"","lastModifiedDate":"2023-08-26"},{"lineNumber":25,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" * Adds a task to the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" * @param task The task to be added.","lastModifiedDate":"2023-08-26"},{"lineNumber":29,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":30,"author":{"gitId":"RoeReRe"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-08-26"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" taskList.add(task);","lastModifiedDate":"2023-08-26"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(String.format(\"Now you have %s tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","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":" * Marks a task as done.","lastModifiedDate":"2023-08-26"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":44,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":45,"author":{"gitId":"RoeReRe"},"content":" public void markTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":46,"author":{"gitId":"RoeReRe"},"content":" taskList.get(i - 1).markAsDone();","lastModifiedDate":"2023-08-26"},{"lineNumber":47,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(taskList.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":51,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":52,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":53,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":54,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":55,"author":{"gitId":"RoeReRe"},"content":" * Marks a task as not done.","lastModifiedDate":"2023-08-26"},{"lineNumber":56,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":57,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":58,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":59,"author":{"gitId":"RoeReRe"},"content":" public void unmarkTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":60,"author":{"gitId":"RoeReRe"},"content":" taskList.get(i - 1).markAsUndone();","lastModifiedDate":"2023-08-26"},{"lineNumber":61,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(taskList.get(i - 1).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":64,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":65,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":66,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":67,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":68,"author":{"gitId":"RoeReRe"},"content":" * Deletes a task from the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":69,"author":{"gitId":"RoeReRe"},"content":" *","lastModifiedDate":"2023-08-26"},{"lineNumber":70,"author":{"gitId":"RoeReRe"},"content":" * @param i The index of the task in the list (1-based indexing).","lastModifiedDate":"2023-08-26"},{"lineNumber":71,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":72,"author":{"gitId":"RoeReRe"},"content":" public void deleteTask(int i) {","lastModifiedDate":"2023-08-26"},{"lineNumber":73,"author":{"gitId":"RoeReRe"},"content":" Task removedTask \u003d taskList.remove(i - 1);","lastModifiedDate":"2023-08-26"},{"lineNumber":74,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(removedTask.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(String.format(\"Now you have %s tasks in the list.\", taskList.size()));","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":79,"author":{"gitId":"RoeReRe"},"content":" dukeBot.storage.writeToDatabase(taskList);","lastModifiedDate":"2023-08-26"},{"lineNumber":80,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":81,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":82,"author":{"gitId":"RoeReRe"},"content":" /**","lastModifiedDate":"2023-08-26"},{"lineNumber":83,"author":{"gitId":"RoeReRe"},"content":" * Lists out all the tasks that are in the list.","lastModifiedDate":"2023-08-26"},{"lineNumber":84,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":85,"author":{"gitId":"RoeReRe"},"content":" public void listTasks() {","lastModifiedDate":"2023-08-26"},{"lineNumber":86,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"RoeReRe"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"RoeReRe"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-08-26"},{"lineNumber":89,"author":{"gitId":"RoeReRe"},"content":" res +\u003d String.format(\"%s.%s%n\", i + 1, taskList.get(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":91,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(res);","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"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":" * Prints all tasks with names strictly containing a keyword.","lastModifiedDate":"2023-08-26"},{"lineNumber":96,"author":{"gitId":"RoeReRe"},"content":" * @param key The keyword.","lastModifiedDate":"2023-08-26"},{"lineNumber":97,"author":{"gitId":"RoeReRe"},"content":" */","lastModifiedDate":"2023-08-26"},{"lineNumber":98,"author":{"gitId":"RoeReRe"},"content":" public void findTasks(String key) {","lastModifiedDate":"2023-08-26"},{"lineNumber":99,"author":{"gitId":"RoeReRe"},"content":" int count \u003d 1;","lastModifiedDate":"2023-08-26"},{"lineNumber":100,"author":{"gitId":"RoeReRe"},"content":" String res \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"RoeReRe"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"RoeReRe"},"content":" for (Task task : taskList) {","lastModifiedDate":"2023-08-26"},{"lineNumber":105,"author":{"gitId":"RoeReRe"},"content":" if (task.getTaskName().contains(key)) {","lastModifiedDate":"2023-08-26"},{"lineNumber":106,"author":{"gitId":"RoeReRe"},"content":" res +\u003d String.format(\"%s. %s%n\", count++, task);","lastModifiedDate":"2023-09-02"},{"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-09-02"},{"lineNumber":110,"author":{"gitId":"RoeReRe"},"content":" Main.outputDialog(res);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"RoeReRe"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":112,"author":{"gitId":"RoeReRe"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"RoeReRe":112}},{"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\" prefWidth\u003d\"600.0\" styleClass\u003d\"root\" xmlns\u003d\"http://javafx.com/javafx/20.0.1\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"RoeReRe"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"RoeReRe"},"content":" \u003cLabel layoutX\u003d\"205.0\" layoutY\u003d\"14.0\" text\u003d\"RoeBot\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"RoeReRe"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"RoeReRe"},"content":" \u003cFont name\u003d\"ROGFonts-Regular\" size\u003d\"36.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"RoeReRe"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"RoeReRe"},"content":" \u003c/Label\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"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":19,"author":{"gitId":"RoeReRe"},"content":" \u003cchildren\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"RoeReRe"},"content":" \u003cScrollPane fx:id\u003d\"scrollPane\" fitToWidth\u003d\"true\" hbarPolicy\u003d\"NEVER\" styleClass\u003d\"dialogBox\" AnchorPane.bottomAnchor\u003d\"0.0\" AnchorPane.leftAnchor\u003d\"0.0\" AnchorPane.rightAnchor\u003d\"0.0\" AnchorPane.topAnchor\u003d\"0.0\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"RoeReRe"},"content":" \u003ccontent\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"RoeReRe"},"content":" \u003cVBox fx:id\u003d\"dialogContainer\" spacing\u003d\"10.0\" styleClass\u003d\"dialogBox\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"RoeReRe"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"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":25,"author":{"gitId":"RoeReRe"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"RoeReRe"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"RoeReRe"},"content":" \u003c/content\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"RoeReRe"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"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":30,"author":{"gitId":"RoeReRe"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"RoeReRe"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"RoeReRe"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"RoeReRe"},"content":" \u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"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\" promptText\u003d\"Enter message here\" styleClass\u003d\"text-area\"\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"RoeReRe"},"content":" \u003cfont\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"RoeReRe"},"content":" \u003cFont name\u003d\"Calibri Light\" size\u003d\"24.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"RoeReRe"},"content":" \u003c/font\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"RoeReRe"},"content":" \u003cpadding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"RoeReRe"},"content":" \u003cInsets left\u003d\"10.0\" right\u003d\"10.0\" /\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"RoeReRe"},"content":" \u003c/padding\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"RoeReRe"},"content":" \u003c/TextField\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"RoeReRe"},"content":" \u003c/children\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"RoeReRe"},"content":"\u003c/AnchorPane\u003e","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"RoeReRe":43}},{"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 87cb1b8d..efba36c3 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":{}}]}]},"authorFileTypeContributionMap":{"RoeReRe":{"java":696,"md":0,"fxml":0,"sh":0,"bat":0,"gradle":1,"txt":10}},"authorContributionVariance":{"RoeReRe":201133.61},"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":{}}]}]},"authorFileTypeContributionMap":{"RoeReRe":{"java":819,"md":0,"fxml":43,"sh":0,"bat":0,"gradle":16,"txt":10}},"authorContributionVariance":{"RoeReRe":133890.72},"authorDisplayNameMap":{"RoeReRe":"CS2103T-T15-2 ONG ..IANG"}} diff --git a/Sebtey_ip_master/authorship.json b/Sebtey_ip_master/authorship.json index 996dfd71..eaa3562f 100644 --- a/Sebtey_ip_master/authorship.json +++ b/Sebtey_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Sebtey":1,"-":42}},{"path":"src/main/java/Events/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that need to be done before a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" //TODO","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" final static String SYMBOL \u003d \"D\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\")) + \"H)\";","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" final String SEPARATOR \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" //D::0::return book::June 6th","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + SEPARATOR + status + SEPARATOR + getDescription() + SEPARATOR + this.by;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":48}},{"path":"src/main/java/Events/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that start at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" //TODO","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"E\";","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String period, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" this.from \u003d period.split(\"-\")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" this.to \u003d period.split(\"-\")[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" return \"[E][\" + getStatusIcon() + \"] \" + super.getDescription() + \"(from: \" + this.start.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\")) + \"H to: \" + this.to + \"H)\";","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" final String SEPARATOR \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" final String period \u003d this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" //E::0::project meeting::Aug 6th 2pm-4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + SEPARATOR + status + SEPARATOR + getDescription() + SEPARATOR + period;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":55}},{"path":"src/main/java/Events/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" public String getDescription(){","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * updateCompletionStatus will change the current completion status of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * to true or false if it is currently false or true respectively.","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public void updateCompletionStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" //If done, change to not done or false","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" //Else, change to done or true","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d !(this.isDone);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" //Events.Task is marked as done with an \"X\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" return isDone","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" ? \"X\"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" return this.isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" return \"[\" + getStatusIcon() +\"] \" + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" public abstract String getType();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" public abstract String convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sebtey":50}},{"path":"src/main/java/Events/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ToDos are tasks that have no date/time attached to them.","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"T\";","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" return \"[T][\" + getStatusIcon() + \"] \" + super.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":34}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import Events.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import Events.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import Events.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import Events.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.IncorrectInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.NoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * Parser makes sense of the user command.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * Returns an int value denoting which action to be performed.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" * @param args is the input taken from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" * @return non-negative int if args is valid input, else -1/.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" public static int parse(String args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" args \u003d args.toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" return 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" //User wishes to see his listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" return 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" args \u003d args.split(\" \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return 2;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" return 3;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" return 4;","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"todo\") || args.equals(\"deadline\") || args.equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" return 5;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" * Returns the index of the task given in the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" * @throws NumberFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException when the user did not input any additional arguments.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" public static int getTargetIndex(String args) throws NumberFormatException, NoDescriptionException {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" if (args.toLowerCase().split(\" \").length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"There is no given task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" int targetIndex \u003d Integer.parseInt(args.toLowerCase().split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" return targetIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" * Returns a new task based on the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" public static Task getTask(String args) throws NoDescriptionException {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" String type \u003d args.split(\" \")[0].toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d null; //For multiple arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"todo \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: deadline \u003cDescription\u003e /by \u003cDue date in dd/MM/yyyy HHmm\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" //TODO add error handling for no \"/by\" keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"deadline \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\"/by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" if (descriptions.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(\"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Deadline(descriptions[0], descriptions[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: event \u003cDescription\u003e /from \u003cstart\u003e /to \u003cend\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"event \", \"\"); //Remove type","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\"/from \"); //Split remaining args into description + (from and to)","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" String from \u003d descriptions[1].split(\" /to \")[0]; //Split (from and to) into from and to","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" String to \u003d descriptions[1].split(\" /to \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Event(descriptions[0], from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" return newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":133}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import Events.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import Events.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import Events.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import Events.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" * Storage deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" private final String dir \u003d \"/VedaMissions\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" private final String storagePath \u003d \"/VedaMissions/Missions.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" private final File storageFile \u003d new File(storagePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" * Adds file into the directory specified.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" * @return whether file has been successfully added into the hard disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public boolean addFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" File directory \u003d new File(dir);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (directory.mkdir()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" storageFile.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"An error occurred while trying to create the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" return storageFile.exists();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" * Returns the stored task list from the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" * @throws FileNotFoundException If the storageFile is not located in its rightful directory.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" Scanner sc \u003d new Scanner(storageFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" final String task \u003d sc.nextLine(); //Each task is listed in a single line","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" char type \u003d task.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d task.split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" //Formatting error in saved file","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"File corrupted.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" * Updates the saved data in the disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" * @param tasks is the current list of tasks the user has.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" * @param isAddingTask indicates whether the user is adding a new task or overwriting the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" * @return true if file is successfully updated.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" * @throws IOException When writer is called upon to write after being closed.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" //TODO overwrite information in storageFile","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" boolean isNotFirstTask \u003d tasks.size() !\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" writer \u003d new FileWriter(storageFile, isAddingTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" String newData;","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" if (isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" //Add a new line containing the latest task","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" newData \u003d (System.lineSeparator() + tasks.get(tasks.size() - 1).convertToStorageForm());","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" } else if (!isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" newData \u003d tasks.get(tasks.size() - 1).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" //Overwrite the file","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" newData \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" //Iterate through tasks and convertToStorageForm","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" newData +\u003d tasks.get(i).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" if (i !\u003d tasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" newData +\u003d System.lineSeparator();","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" writer.write(newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Failed to update tasks on disk.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sebtey":146}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import Events.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" * TaskList encapsulates the task lists and operations related to the task lists.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" * Retrieves the saved data from file.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" public boolean load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" if (storage.checkFileExists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" //File does exist","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" tasks \u003d storage.retrieveTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to find file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" //File does not exist","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" storage.addFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" * Deletes the task at the given index of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is null if encounter an exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" public Task deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Noted. I have removed the following mission:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" * Adds the given task into the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" public boolean addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" if (task !\u003d null \u0026\u0026 tasks.add(task)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"added in mission:\\n\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Error writing to file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"System is unable to accommodate the new mission\");","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" public void markAsDone(int taskIndex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" if (task.isDone()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" //Events.Task already marked as done","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission has been completed previously.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completed successfully.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" public void markUndone(int taskIndex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" if (!(task.isDone())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" //task already marked as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission is already marked as undone!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completion status reverted.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" public void printList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Missions:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" tasks.forEach( task -\u003e System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" (tasks.indexOf(task) + 1) + \".\" + task","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":" ));","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":156}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * Ui handles the interactions with user.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" public Ui(Scanner sc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * Retrieves input from the user in the command line.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" public String getInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" public void welcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Veda initialised. How may I help you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" * Terminates the ui and closes the scanner.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" public void exit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Terminating reader.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Bye. All the best for your mission!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":41}},{"path":"src/main/java/Veda.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.IncorrectInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.NoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Veda is the main class for the chatbot application \"Veda\".","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Veda {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" private final static Storage storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" private final static TaskList tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private final static Ui ui \u003d new Ui(new Scanner(System.in));","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" private static void initialise() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" ui.welcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" private static void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" while (true) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" String input \u003d ui.getInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" int method \u003d Parser.parse(input); //Get which commands to perform based on user\u0027s input","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" switch (method) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" case -1:","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //Unrecognised input","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unrecognised command.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" case 0:","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" ui.exit();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" case 1:","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" //User wishes to see listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" tasks.printList();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" case 2:","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" case 3:","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" tasks.markUndone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" case 4:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" tasks.deleteTask(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" case 5:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" tasks.addTask(Parser.getTask(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" } catch (IncorrectInputException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Ensure your deadline is of the format {dd/MM/yyyy HHmm}\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" initialise();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" run();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Sebtey":95}},{"path":"src/main/java/VedaExceptions/IncorrectInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package VedaExceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"public class IncorrectInputException extends RuntimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" public IncorrectInputException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" return \"Please ensure that you key in your arguments correctly.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sebtey":12}},{"path":"src/main/java/VedaExceptions/NoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package VedaExceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"public class NoDescriptionException extends IncorrectInputException {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" public NoDescriptionException(String message) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":12}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"todo testing123","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"unmark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"java -classpath ..\\bin Veda \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Sebtey":1,"-":20}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"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":"Sebtey"},"content":" mainClass.set(\"seedo.duke.Duke\")","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" archiveBaseName \u003d \"Veda\"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" archiveVersion \u003d \"V0.1\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" archiveFileName \u003d \"Veda.jar\"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Sebtey":4,"-":40}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import Tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import Tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import Tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.ExcessiveArgumentException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.IncorrectInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.NoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * Parser makes sense of the user command.","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" * Returns an int value denoting which action to be performed.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" * @param args is the input taken from the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" * @return non-negative int if args is valid input, else -1/.","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" public static int parse(String args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" args \u003d args.toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" return 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //User wishes to see his listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" return 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" args \u003d args.split(\" \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" if (args.equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" return 2;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" return 3;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" return 4;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" } else if (args.equals(\"todo\") || args.equals(\"deadline\") || args.equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" return 5;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" return -1;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" * Returns the index of the task given in the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" * @throws NumberFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException when the user did not input any additional arguments.","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" * @throws ExcessiveArgumentException when the user input more arguments than required.","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" public static int getTargetIndex(String args)","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" throws NumberFormatException, NoDescriptionException, ExcessiveArgumentException, IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" if (args.split(\" \").length \u003c 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"There is no given task index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" } else if (args.split(\" \").length \u003e 2) {","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" throw new ExcessiveArgumentException(\"There are too many arguments.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" int targetIndex \u003d Integer.parseInt(args.toLowerCase().split(\" \")[1]) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" if (targetIndex \u003c 0) {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(\"Index of task must be greater than 0.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" return targetIndex;","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" * Returns a new task based on the command line argument args.","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" * @param args","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" * @throws NoDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" public static Task getTask(String args) throws NoDescriptionException {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" String type \u003d args.split(\" \")[0].toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" Task newTask \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d null; //For multiple arguments","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"todo \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: deadline \u003cDescription\u003e /by \u003cDue date in dd/MM/yyyy HHmm\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" //TODO add error handling for no \"/by\" keyword","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"deadline \", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /by \");","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" if (descriptions.length \u003c 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" throw new IncorrectInputException(\"Please input the right order: deadline \u003cDescription\u003e /by \u003cdue date\u003e\");","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Deadline(descriptions[0], descriptions[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" //Expected CL input: event \u003cDescription\u003e /from \u003cstart\u003e /to \u003cend\u003e","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" if (description.toLowerCase() \u003d\u003d type) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" throw new NoDescriptionException(\"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" description \u003d args.replaceFirst(\"event \", \"\"); //Remove type","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" descriptions \u003d description.split(\" /from \"); //Split remaining args into description + (from and to)","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" String from \u003d descriptions[1].split(\" /to \")[0]; //Split (from and to) into from and to","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" String to \u003d descriptions[1].split(\" /to \")[1];","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" newTask \u003d new Event(descriptions[0], from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" return newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":142}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import Tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import Tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import Tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import java.io.File;","lastModifiedDate":"2023-08-31"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-08-31"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-31"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-31"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-31"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" * Storage deals with loading tasks from the file and saving tasks in the file.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"public class Storage {","lastModifiedDate":"2023-08-31"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" private final String dir \u003d \"/VedaMissions\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" private final String storagePath \u003d \"/VedaMissions/Missions.txt\";","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" private final File storageFile \u003d new File(storagePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-31"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" * Adds file into the directory specified.","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" * @return whether file has been successfully added into the hard disk.","lastModifiedDate":"2023-08-31"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public boolean addFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" File directory \u003d new File(dir);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" if (directory.mkdir()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" storageFile.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-31"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"An error occurred while trying to create the file.\");","lastModifiedDate":"2023-08-31"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-08-31"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" return storageFile.exists();","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" * Returns the stored task list from the hard disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" * @throws FileNotFoundException If the storageFile is not located in its rightful directory.","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-31"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" Scanner sc \u003d new Scanner(storageFile);","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" while (sc.hasNextLine()) {","lastModifiedDate":"2023-08-31"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" final String task \u003d sc.nextLine(); //Each task is listed in a single line","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" char type \u003d task.charAt(0);","lastModifiedDate":"2023-08-31"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d task.split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-08-31"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-08-31"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-08-31"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-31"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-08-31"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-08-31"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" //Formatting error in saved file","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"File corrupted.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-08-31"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" * Updates the saved data in the disk.","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" * @param tasks is the current list of tasks the user has.","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" * @param isAddingTask indicates whether the user is adding a new task or overwriting the file.","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" * @return true if file is successfully updated.","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" * @throws IOException When writer is called upon to write after being closed.","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" boolean isNotFirstTask \u003d tasks.size() !\u003d 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" writer \u003d new FileWriter(storageFile, isAddingTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" String newData;","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" if (isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" //Add a new line containing the latest task","lastModifiedDate":"2023-09-01"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" newData \u003d (System.lineSeparator() + tasks.get(tasks.size() - 1).convertToStorageForm());","lastModifiedDate":"2023-09-01"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" } else if (!isNotFirstTask \u0026\u0026 isAddingTask) {","lastModifiedDate":"2023-09-01"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" newData \u003d tasks.get(tasks.size() - 1).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-01"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" //Overwrite the file","lastModifiedDate":"2023-09-01"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" newData \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" //Iterate through tasks and convertToStorageForm","lastModifiedDate":"2023-09-01"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" newData +\u003d tasks.get(i).convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" if (i !\u003d tasks.size() - 1) {","lastModifiedDate":"2023-09-01"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" newData +\u003d System.lineSeparator();","lastModifiedDate":"2023-09-01"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" writer.write(newData);","lastModifiedDate":"2023-09-01"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-01"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Failed to update tasks on disk.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-01"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-01"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-31"}],"authorContributionMap":{"Sebtey":145}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import Tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" * TaskList encapsulates the task lists and operations related to the task lists.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" private ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" public TaskList(Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" return this.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" * Retrieves the saved data from file.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" public boolean load() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" if (storage.checkFileExists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" //File does exist","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" tasks \u003d storage.retrieveTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to find file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" //File does not exist","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" storage.addFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" * Deletes the task at the given index of the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex is null if encounter an exception.","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" public Task deleteTask(int taskIndex) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.remove(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Noted. I have removed the following mission:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" * Adds the given task into the list of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" public boolean addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" if (task !\u003d null \u0026\u0026 tasks.add(task)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"added in mission:\\n\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" storage.updateData(tasks, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Error writing to file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"System is unable to accommodate the new mission\");","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" public boolean markAsDone(int taskIndex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" if (task.isDone()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" //Events.Task already marked as done","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission has been completed previously.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completed successfully.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" return storage.updateData(tasks, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" * Marks the task at the given index as undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" * @param taskIndex","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":" public boolean markUndone(int taskIndex) {","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" Task task \u003d tasks.get(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" if (!(task.isDone())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" //task already marked as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission is already marked as undone!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" task.updateCompletionStatus();","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Mission status updated! Mission completion status reverted.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" System.out.println(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" return storage.updateData(tasks, false);","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" e.printStackTrace();","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unable to update file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" return false;","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"Sebtey"},"content":" public void printList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Missions:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"Sebtey"},"content":" tasks.forEach( task -\u003e System.out.println(","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"Sebtey"},"content":" (tasks.indexOf(task) + 1) + \".\" + task","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"Sebtey"},"content":" ));","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":162}},{"path":"src/main/java/Tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that need to be done before a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" //TODO","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" final static String SYMBOL \u003d \"D\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" protected String by;","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public Deadline(String description, String by, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" this.by \u003d by;","lastModifiedDate":"2023-08-31"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" this.deadline \u003d LocalDateTime.parse(by, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return \"[D]\" + super.toString() + \"(by: \" + this.deadline.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\")) + \"H)\";","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" final String SEPARATOR \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" //D::0::return book::June 6th","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + SEPARATOR + status + SEPARATOR + getDescription() + SEPARATOR + this.by;","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":48}},{"path":"src/main/java/Tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Tasks that start at a specific date/time and ends at a specific date/time.","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" //TODO","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"E\";","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" protected String from;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" protected LocalDateTime start;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" protected String to;","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public Event(String description, String period, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" this.from \u003d period.split(\"-\")[0];","lastModifiedDate":"2023-08-31"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" this.to \u003d period.split(\"-\")[1];","lastModifiedDate":"2023-08-31"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" this.start \u003d LocalDateTime.parse(from, DateTimeFormatter.ofPattern(\"dd/MM/yyyy HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" return \"[E][\" + getStatusIcon() + \"] \" + super.getDescription() + \"(from: \" + this.start.format(DateTimeFormatter.ofPattern(\"dd MMMM yyyy HHmm\")) + \"H to: \" + this.to + \"H)\";","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" final String SEPARATOR \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" final String period \u003d this.from + \"-\" + this.to;","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" //E::0::project meeting::Aug 6th 2pm-4pm","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + SEPARATOR + status + SEPARATOR + getDescription() + SEPARATOR + period;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":55}},{"path":"src/main/java/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" Task(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" Task(String description, boolean isDone) {","lastModifiedDate":"2023-08-31"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" public String getDescription(){","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" return this.description;","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" * updateCompletionStatus will change the current completion status of the task","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" * to true or false if it is currently false or true respectively.","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" public void updateCompletionStatus() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" //If done, change to not done or false","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" //Else, change to done or true","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" this.isDone \u003d !(this.isDone);","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" //Events.Task is marked as done with an \"X\"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" return isDone","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" ? \"X\"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" : \" \";","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" public boolean isDone() {","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" return this.isDone;","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" return \"[\" + getStatusIcon() +\"] \" + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" public abstract String getType();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" public abstract String convertToStorageForm();","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"Sebtey":50}},{"path":"src/main/java/Tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * ToDos are tasks that have no date/time attached to them.","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" static final String SYMBOL \u003d \"T\";","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" public ToDo(String description, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" super(description, isDone);","lastModifiedDate":"2023-08-31"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-31"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-31"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" public String getType() {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" return SYMBOL;","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" return \"[T][\" + getStatusIcon() + \"] \" + super.getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public String convertToStorageForm() {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" final String separator \u003d \"::\";","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" final String status \u003d isDone() ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" return SYMBOL + separator + status + separator + getDescription();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":34}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" * Ui handles the interactions with user.","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" private Scanner sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" public Ui(Scanner sc) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * Retrieves input from the user in the command line.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" * @return","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" public String getInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" return sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" * Greets the user.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" public void welcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Veda initialised. How may I help you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" * Terminates the ui and closes the scanner.","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" public void exit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Terminating reader.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" sc.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Bye. All the best for your mission!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"Sebtey":41}},{"path":"src/main/java/Veda.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.IncorrectInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.NoDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":" * Veda is the main class for the chatbot application \"Veda\".","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" * @author Sebastian Tay","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"public class Veda {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" private final static Storage storage \u003d new Storage();","lastModifiedDate":"2023-08-31"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" private final static TaskList tasks \u003d new TaskList(storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" private final static Ui ui \u003d new Ui(new Scanner(System.in));","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" private static void initialise() {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" ui.welcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" private static void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" while (true) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" String input \u003d ui.getInput();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" int method \u003d Parser.parse(input); //Get which commands to perform based on user\u0027s input","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" switch (method) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" case -1:","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" //Unrecognised input","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Unrecognised command.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" case 0:","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" //User wishes to exit the program","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" ui.exit();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" case 1:","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" //User wishes to see listed missions","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" tasks.printList();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" case 2:","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as done","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" case 3:","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" //User wishes to mark task as undone","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" tasks.markUndone(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" case 4:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" //User wishes to delete a task","lastModifiedDate":"2023-08-25"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" tasks.deleteTask(Parser.getTargetIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Invalid index! Please ensure you correctly key in your target index.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" } catch (NoDescriptionException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" case 5:","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" //User wishes to add a new task","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" try {","lastModifiedDate":"2023-08-25"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" tasks.addTask(Parser.getTask(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" } catch (IncorrectInputException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-25"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Ensure your deadline is of the format {dd/MM/yyyy HHmm}\");","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" initialise();","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":" run();","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"Sebtey":95}},{"path":"src/main/java/VedaExceptions/ExcessiveArgumentException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package VedaExceptions;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"public class ExcessiveArgumentException extends IncorrectInputException {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" public ExcessiveArgumentException(String message) {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":12}},{"path":"src/main/java/VedaExceptions/IncorrectInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package VedaExceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"public class IncorrectInputException extends RuntimeException {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" public IncorrectInputException(String message) {","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" return \"Please ensure that you key in your arguments correctly.\";","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"Sebtey":12}},{"path":"src/main/java/VedaExceptions/NoDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"package VedaExceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"public class NoDescriptionException extends IncorrectInputException {","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":" public NoDescriptionException(String message) {","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":" super(message);","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":" return super.getMessage();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":12}},{"path":"src/test/java/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import Tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import Tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import Tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.ExcessiveArgumentException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.IncorrectInputException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import VedaExceptions.NoDescriptionException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":" public void parse_emptyInput_negativeOne() {","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" public void parse_exit_one() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"bye\");","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" assertEquals(0, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":" public void parse_statementWithExitFront_negativeOne() {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"bye world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" public void parse_statementWithExitMiddle_negativeOne() {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"good bye cruel world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" assertEquals(-1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" public void parse_listCall_One() {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" int methodType \u003d Parser.parse(\"list\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" assertEquals(1, methodType);","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" public void parse_instantiateNewTask_fiveFiveFive() {","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" int methodTypeOne \u003d Parser.parse(\"todo hello world\");","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":" int methodTypeTwo \u003d Parser.parse(\"deadline see you /by 08/12/2023 0800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" int methodTypeThree \u003d Parser.parse(\"event bye world /from 08/12/2023 0900 /to 0900\");","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" String actualOutput \u003d String.valueOf(methodTypeOne) + String.valueOf(methodTypeTwo) + String.valueOf(methodTypeThree);","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":" assertEquals(\"555\", actualOutput);","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_excessiveArguments_throwExcessiveArgumentException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":" assertThrows(ExcessiveArgumentException.class, () -\u003e Parser.getTargetIndex(\"mark 1 remove\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_stringArgumentIndex_throwNumberFormatException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" assertThrows(NumberFormatException.class, () -\u003e Parser.getTargetIndex(\"mark 1t\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_noArgumentIndex_throwNoDescriptionException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":" assertThrows(NoDescriptionException.class, () -\u003e Parser.getTargetIndex(\"mark \"));","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_invalidArgumentIndex_throwIncorrectInputException() {","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":" assertThrows(IncorrectInputException.class, () -\u003e Parser.getTargetIndex(\"mark -1\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" public void getTargetIndex_correctArgumentIndex_correctIndex() {","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":" int index \u003d Parser.getTargetIndex(\"mark 4\");","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" // argument index is offset by +1 from actual index of task for user-friendliness","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" assertEquals(3, index);","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" public void getTask_todoTaskArgument_todoTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" Task task \u003d Parser.getTask(\"todo test mission\");","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" assertEquals(new ToDo(\"test mission\").convertToStorageForm(), task.convertToStorageForm());","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" public void getTask_deadlineTaskArgument_deadlineTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" final String ARG \u003d \"deadline test mission /by 08/08/2023 0800\";","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" final Task ACTUAL_TASK \u003d Parser.getTask(ARG);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":" assertEquals(new Deadline(\"test mission\", \"08/08/2023 0800\").convertToStorageForm(), ACTUAL_TASK.convertToStorageForm());","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" public void getTask_eventTaskArgument_eventTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" final String ARG \u003d \"event test mission /from 08/08/2023 0800 /to 0900\";","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" final Task ACTUAL_TASK \u003d Parser.getTask(ARG);","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":" //We test if they are equal if they return the same storage form","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" assertEquals(new Event(\"test mission\", \"08/08/2023 0800\", \"0900\").convertToStorageForm(), ACTUAL_TASK.convertToStorageForm());","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":111}},{"path":"src/test/java/TaskListTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"import Tasks.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"import Tasks.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"import Tasks.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"import Tasks.ToDo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"Sebtey"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"Sebtey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"Sebtey"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"Sebtey"},"content":"public class TaskListTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"Sebtey"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"Sebtey"},"content":" * StorageStub is used to emulate Storage to allow unit testing of TaskList.","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"Sebtey"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":" private class StorageStub extends Storage {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"Sebtey"},"content":" String[] data;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"Sebtey"},"content":" protected StorageStub() {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"Sebtey"},"content":" super();","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"Sebtey"},"content":" data \u003d new String[] {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"Sebtey"},"content":" \"T::0::sing a song\",","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"Sebtey"},"content":" \"D::0::hi world ::05/09/2023 2359\",","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"Sebtey"},"content":" \"E::0::apocalypse ::03/09/2023 0100-03/09/2023 1200\"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"Sebtey"},"content":" };","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"Sebtey"},"content":" public boolean checkFileExists() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"Sebtey"},"content":" public ArrayList\u003cTask\u003e retrieveTasks() throws FileNotFoundException {","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"Sebtey"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"Sebtey"},"content":" for(int i \u003d 0; i \u003c data.length; i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"Sebtey"},"content":" char type \u003d data[i].charAt(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"Sebtey"},"content":" String[] descriptions \u003d data[i].split(\"::\"); //:: demarcates a different field","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"Sebtey"},"content":" switch (type) {","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"Sebtey"},"content":" case \u0027T\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"Sebtey"},"content":" tasks.add(new ToDo(descriptions[2], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"Sebtey"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"Sebtey"},"content":" //Events.Deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Deadline(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"Sebtey"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"Sebtey"},"content":" //Events.Event","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"Sebtey"},"content":" tasks.add(new Event(descriptions[2], descriptions[3], descriptions[1].matches(\"1\")));","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"Sebtey"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"Sebtey"},"content":" default:","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"Sebtey"},"content":" System.out.println(\"Wrong file format\");","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"Sebtey"},"content":" return tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"Sebtey"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"Sebtey"},"content":" public boolean updateData(ArrayList\u003cTask\u003e tasks, boolean isAddingTask) throws IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"Sebtey"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":69,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"Sebtey"},"content":" TaskList tasks \u003d new TaskList(new StorageStub());","lastModifiedDate":"2023-09-03"},{"lineNumber":71,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"Sebtey"},"content":" public void load_readFromStorageStub_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":74,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, tasks.load());","lastModifiedDate":"2023-09-03"},{"lineNumber":75,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":76,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":77,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":78,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_invalidIndex_null() {","lastModifiedDate":"2023-09-03"},{"lineNumber":79,"author":{"gitId":"Sebtey"},"content":" //tasks have only 3 tasks","lastModifiedDate":"2023-09-03"},{"lineNumber":80,"author":{"gitId":"Sebtey"},"content":" final Task DELETED_TASK \u003d tasks.deleteTask(5);","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"Sebtey"},"content":" assertEquals(null, DELETED_TASK);","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_validIndex_todoTask() {","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"Sebtey"},"content":" //task at index 0 is a todotask with description \"sing a song\"","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":89,"author":{"gitId":"Sebtey"},"content":" final Task DELETED_TASK \u003d tasks.deleteTask(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":90,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"Sebtey"},"content":" assertEquals(new ToDo(\"sing a song\").convertToStorageForm(), DELETED_TASK.convertToStorageForm());","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"Sebtey"},"content":" public void deleteTask_postDeletionLength_two() {","lastModifiedDate":"2023-09-03"},{"lineNumber":96,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":97,"author":{"gitId":"Sebtey"},"content":" tasks.deleteTask(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":98,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":99,"author":{"gitId":"Sebtey"},"content":" final int LENGTH \u003d tasks.getTasks().size();","lastModifiedDate":"2023-09-03"},{"lineNumber":100,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":101,"author":{"gitId":"Sebtey"},"content":" assertEquals(2, LENGTH);","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIsNotDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":107,"author":{"gitId":"Sebtey"},"content":" final boolean IS_SUCCESSFUL \u003d tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, IS_SUCCESSFUL);","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":112,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":113,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIsDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"Sebtey"},"content":" final boolean IS_SUCCESSFUL \u003d tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":117,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":118,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, IS_SUCCESSFUL);","lastModifiedDate":"2023-09-03"},{"lineNumber":119,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":120,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"Sebtey"},"content":" public void markAsDone_taskIndexInvalid_false() {","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":124,"author":{"gitId":"Sebtey"},"content":" final boolean IS_SUCCESSFUL \u003d tasks.markAsDone(5);","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"Sebtey"},"content":" assertEquals(false, IS_SUCCESSFUL);","lastModifiedDate":"2023-09-03"},{"lineNumber":127,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":128,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"Sebtey"},"content":" public void markUndone_taskIsDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"Sebtey"},"content":" tasks.markAsDone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":133,"author":{"gitId":"Sebtey"},"content":" final boolean IS_SUCCESSFUL \u003d tasks.markUndone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, IS_SUCCESSFUL);","lastModifiedDate":"2023-09-03"},{"lineNumber":136,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"Sebtey"},"content":" public void markUndone_taskIsNotDone_true() {","lastModifiedDate":"2023-09-03"},{"lineNumber":140,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":141,"author":{"gitId":"Sebtey"},"content":" final boolean IS_SUCCESSFUL \u003d tasks.markUndone(0);","lastModifiedDate":"2023-09-03"},{"lineNumber":142,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":143,"author":{"gitId":"Sebtey"},"content":" assertEquals(true, IS_SUCCESSFUL);","lastModifiedDate":"2023-09-03"},{"lineNumber":144,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":146,"author":{"gitId":"Sebtey"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":147,"author":{"gitId":"Sebtey"},"content":" public void markUndone_taskIndexInvalid_false() {","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"Sebtey"},"content":" tasks.load();","lastModifiedDate":"2023-09-03"},{"lineNumber":149,"author":{"gitId":"Sebtey"},"content":" final boolean IS_SUCCESSFUL \u003d tasks.markUndone(5);","lastModifiedDate":"2023-09-03"},{"lineNumber":150,"author":{"gitId":"Sebtey"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":151,"author":{"gitId":"Sebtey"},"content":" assertEquals(false, IS_SUCCESSFUL);","lastModifiedDate":"2023-09-03"},{"lineNumber":152,"author":{"gitId":"Sebtey"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":153,"author":{"gitId":"Sebtey"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"Sebtey":153}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"Sebtey"},"content":"todo testing123","lastModifiedDate":"2023-08-25"},{"lineNumber":2,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"Sebtey"},"content":"mark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"Sebtey"},"content":"unmark 1","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"Sebtey"},"content":"list","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"Sebtey"},"content":"bye","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"Sebtey":7}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"Sebtey"},"content":"java -classpath ..\\bin Veda \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"REM compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"FC ACTUAL.TXT EXPECTED.TXT","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Sebtey":1,"-":20}}] diff --git a/Sebtey_ip_master/commits.json b/Sebtey_ip_master/commits.json index fe89f868..0445856f 100644 --- a/Sebtey_ip_master/commits.json +++ b/Sebtey_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Sebtey":[{"date":"2023-08-23","commitResults":[{"hash":"78649d5f247dd30c1823567b412fbcd6e7e05e70","isMergeCommit":false,"messageTitle":"Implemented Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":10}}},{"hash":"895ba0beda2df1ca501282f88268ac9d025a4d97","isMergeCommit":false,"messageTitle":"echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"385cee9485f0b439a1a24a60d7128a9014b09b55","isMergeCommit":false,"messageTitle":"Add, List feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a0ec1247c7c30ac11fd25676f11d6278f7ca4cce","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}}]},{"date":"2023-08-25","commitResults":[{"hash":"41a206536fec747ea66de6a5fcf173db465d4cf3","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":6}}},{"hash":"608a123b587487c4fedf9b64259540440cfafeef","isMergeCommit":false,"messageTitle":"Added in simple automated CLI testing","messageBody":"","tags":["A-TextUITesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"9cce85327cfb82f8bf04f5b702bc75d754f947fc","isMergeCommit":false,"messageTitle":"Added in error handling features","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":22}}},{"hash":"9f6ded6b5b197dbc4a29e2929b75b6eb5b704ec3","isMergeCommit":false,"messageTitle":"Add in deletion of task feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a143d4c8e95f53da48fc3cda5a50688a6f5298f0","isMergeCommit":false,"messageTitle":"Implement file systems","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":0}}},{"hash":"a0b01da241a3b5680010f75cad3d63d1f26b21c3","isMergeCommit":false,"messageTitle":"Add file reading mechanism","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":57}}}]},{"date":"2023-09-01","commitResults":[{"hash":"ed1a587dcb61b763324a4aff93afe686424892a6","isMergeCommit":false,"messageTitle":"Add autosaving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":175,"deletions":66}}},{"hash":"094200ffe6d88002684681fc11a6e7345067deb4","isMergeCommit":false,"messageTitle":"Rename saved tasks file naming convention","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}},{"hash":"b61a4bf88386145378aa02e77b6fca53ac65657b","isMergeCommit":false,"messageTitle":"Implement date time support for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":10}}},{"hash":"304472a6ca0734975a986e56386fa8b6ab89777d","isMergeCommit":false,"messageTitle":"Add dateTime support for event tasks","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9a79510b76947b6221cec0082d84d21dd2ca7867","isMergeCommit":false,"messageTitle":"OOP TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":108}}},{"hash":"3e5cf9819183dde479b655b577675c00fb8a8d66","isMergeCommit":false,"messageTitle":"Code refactoring into OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":111}}},{"hash":"3ff8a3c3280dff475993662d69a6b35ecae97d2d","isMergeCommit":false,"messageTitle":"Package the files into repective packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":26}}},{"hash":"80f2cf0cdfdabbc4e5c4eec2b7749bb1728bd234","isMergeCommit":false,"messageTitle":"Add header comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"fce9c129e54241e340b60082be4e15b504905d25","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Sebtey/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d8a547b7d9e875eabc6307e76226c0edc7708347","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"Sebtey":{"java":782,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":7}},"authorContributionVariance":{"Sebtey":36409.812},"authorDisplayNameMap":{"Sebtey":"CS2103T-T17-1 SEBA.. XUN"}} +{"authorDailyContributionsMap":{"Sebtey":[{"date":"2023-08-23","commitResults":[{"hash":"78649d5f247dd30c1823567b412fbcd6e7e05e70","isMergeCommit":false,"messageTitle":"Implemented Level 0","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":10}}},{"hash":"895ba0beda2df1ca501282f88268ac9d025a4d97","isMergeCommit":false,"messageTitle":"echo feature","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":3}}},{"hash":"385cee9485f0b439a1a24a60d7128a9014b09b55","isMergeCommit":false,"messageTitle":"Add, List feature","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":19,"deletions":2}}}]},{"date":"2023-08-24","commitResults":[{"hash":"a0ec1247c7c30ac11fd25676f11d6278f7ca4cce","isMergeCommit":false,"messageTitle":"Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":4}}}]},{"date":"2023-08-25","commitResults":[{"hash":"41a206536fec747ea66de6a5fcf173db465d4cf3","isMergeCommit":false,"messageTitle":"ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":136,"deletions":6}}},{"hash":"608a123b587487c4fedf9b64259540440cfafeef","isMergeCommit":false,"messageTitle":"Added in simple automated CLI testing","messageBody":"","tags":["A-TextUITesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":1,"deletions":1},"bat":{"insertions":1,"deletions":1}}},{"hash":"9cce85327cfb82f8bf04f5b702bc75d754f947fc","isMergeCommit":false,"messageTitle":"Added in error handling features","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":58,"deletions":22}}},{"hash":"9f6ded6b5b197dbc4a29e2929b75b6eb5b704ec3","isMergeCommit":false,"messageTitle":"Add in deletion of task feature","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":2}}}]},{"date":"2023-08-31","commitResults":[{"hash":"a143d4c8e95f53da48fc3cda5a50688a6f5298f0","isMergeCommit":false,"messageTitle":"Implement file systems","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":0}}},{"hash":"a0b01da241a3b5680010f75cad3d63d1f26b21c3","isMergeCommit":false,"messageTitle":"Add file reading mechanism","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":105,"deletions":57}}}]},{"date":"2023-09-01","commitResults":[{"hash":"ed1a587dcb61b763324a4aff93afe686424892a6","isMergeCommit":false,"messageTitle":"Add autosaving feature","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":175,"deletions":66}}},{"hash":"094200ffe6d88002684681fc11a6e7345067deb4","isMergeCommit":false,"messageTitle":"Rename saved tasks file naming convention","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":13}}},{"hash":"b61a4bf88386145378aa02e77b6fca53ac65657b","isMergeCommit":false,"messageTitle":"Implement date time support for deadline tasks","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":30,"deletions":10}}},{"hash":"304472a6ca0734975a986e56386fa8b6ab89777d","isMergeCommit":false,"messageTitle":"Add dateTime support for event tasks","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":6}}}]},{"date":"2023-09-02","commitResults":[{"hash":"9a79510b76947b6221cec0082d84d21dd2ca7867","isMergeCommit":false,"messageTitle":"OOP TaskList","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":185,"deletions":108}}},{"hash":"3e5cf9819183dde479b655b577675c00fb8a8d66","isMergeCommit":false,"messageTitle":"Code refactoring into OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":208,"deletions":111}}},{"hash":"3ff8a3c3280dff475993662d69a6b35ecae97d2d","isMergeCommit":false,"messageTitle":"Package the files into repective packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":53,"deletions":26}}},{"hash":"80f2cf0cdfdabbc4e5c4eec2b7749bb1728bd234","isMergeCommit":false,"messageTitle":"Add header comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":4}}},{"hash":"fce9c129e54241e340b60082be4e15b504905d25","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 of https://github.com/Sebtey/ip into add-gradle-support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d8a547b7d9e875eabc6307e76226c0edc7708347","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":0}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ea7d0a805657d6c19d6b50837c45bb941cb25ba7","isMergeCommit":false,"messageTitle":"Add JUnit testing for Parser and TaskList","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":0,"deletions":1},"java":{"insertions":315,"deletions":25}}},{"hash":"d12653d2d33ec3e2e2e7fdfb47198a119c56d114","isMergeCommit":false,"messageTitle":"Tweek file output name for shadow dependency in build gradle","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":4,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"Sebtey":{"java":1072,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":4,"txt":7}},"authorContributionVariance":{"Sebtey":37503.66},"authorDisplayNameMap":{"Sebtey":"CS2103T-T17-1 SEBA.. XUN"}} diff --git a/SungMatt_ip_master/authorship.json b/SungMatt_ip_master/authorship.json index cac4cf6a..cdf10f1a 100644 --- a/SungMatt_ip_master/authorship.json +++ b/SungMatt_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":" protected String date;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":" Deadline(String name, String date) {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":" super(name, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" Deadline(String name, boolean isDone, String date ) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" public String getDate() {","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" return this.date;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" public String identifier() {","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" return \"D\";","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" * Returns String form for storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" * @returns String for storage format.","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" public String toFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" return identifier() + \" | \" + showStatusAsFile() + \" | \" + showName() + \" | \" + getDate();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" return String.format(\"[%s] [%s] %s (by: %s)\", this.identifier(), this.showStatus(), this.showName(), this.getDate());","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":30}},{"path":"src/main/java/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":" protected String startDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":" protected String endDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":" Event(String name, String startDate, String endDate) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" super(name, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" Event(String name, boolean isDone, String startDate, String endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" public String getStartDate() {","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" return this.startDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" public String getEndDate() {","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" return this.endDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" public String identifier() {","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" return \"E\";","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" * Returns String form for storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" * @returns String for storage format.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" public String toFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" return identifier() + \" | \" + showStatusAsFile() + \" | \" + showName() + \" | \" + getStartDate() + \" | \" + getEndDate();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" return String.format(\"[%s] [%s] %s (from: %s to: %s)\", this.identifier(), this.showStatus(), this.showName(),","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" this.getStartDate(), this.getEndDate());","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":38}},{"path":"src/main/java/MattBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import java.util.List;","lastModifiedDate":"2023-08-22"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"public class MattBot {","lastModifiedDate":"2023-08-22"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" private static final String NAME \u003d \"MattBot\";","lastModifiedDate":"2023-08-22"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":" private static Storage mattmory;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" private static TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" // Load save file","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" // List\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" mattmory \u003d new Storage();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" tasks \u003d mattmory.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" /*String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-22"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Hello from\\n\" + logo);*/","lastModifiedDate":"2023-08-22"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-22"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Hello! I\u0027m \" + NAME);","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-22"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-22"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" String userInput;","lastModifiedDate":"2023-08-22"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" while (true) {","lastModifiedDate":"2023-08-22"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" // Take user input in, and process user input","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-22"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" String command \u003d userInput.split(\" \",2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" if (command.equals(\"bye\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Bye, Hope to see you soon!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" System.out.println(String.format(\"%d. %s\", i+1, t));","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"mark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" int taskId \u003d Integer.parseInt(userInput.split(\" \",2)[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" tasks.markTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Great job! You have completed the task \" + t.showName());","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"unmark\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" int taskId \u003d Integer.parseInt(userInput.split(\" \",2)[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":" tasks.unmarkTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, you have uncompleted \" + t.showName());","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":67,"author":{"gitId":"SungMatt"},"content":" } else {","lastModifiedDate":"2023-08-22"},{"lineNumber":68,"author":{"gitId":"SungMatt"},"content":" int len \u003d userInput.split(\" \",2).length;","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"SungMatt"},"content":" if (len \u003c\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, your input is bad.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"SungMatt"},"content":" System.out.println(command + \" requires an argument.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":77,"author":{"gitId":"SungMatt"},"content":" String arguments \u003d userInput.split(\" \",2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"SungMatt"},"content":" Task t;","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"SungMatt"},"content":" if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"SungMatt"},"content":" t \u003d new Todo(arguments);","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"SungMatt"},"content":" String name \u003d arguments.split(\" /by \",2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"SungMatt"},"content":" String dueDate \u003d arguments.split(\" /by \",2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"SungMatt"},"content":" t \u003d new Deadline(name, dueDate);","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"SungMatt"},"content":" String name \u003d arguments.split(\" /from \",2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"SungMatt"},"content":" String dates \u003d arguments.split(\" /from \",2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"SungMatt"},"content":" String startDate \u003d dates.split(\" /to \")[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"SungMatt"},"content":" String endDate \u003d dates.split(\" /to \",2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"SungMatt"},"content":" t \u003d new Event(name, startDate, endDate);","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"SungMatt"},"content":" if (tasks.size() \u003d\u003d 0 || tasks.size() \u003c Integer.parseInt(arguments)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oops, you\u0027re deleting a task that doesn\u0027t exist.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"SungMatt"},"content":" t \u003d tasks.getTask(Integer.parseInt(arguments));","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I have removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"SungMatt"},"content":" tasks.removeTask(Integer.parseInt(arguments));","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"SungMatt"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I didn\u0027t quite understand your input.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":118,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":120,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":121,"author":{"gitId":"SungMatt"},"content":" public static void printTop() {","lastModifiedDate":"2023-08-23"},{"lineNumber":122,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-23"},{"lineNumber":123,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":124,"author":{"gitId":"SungMatt"},"content":" public static void printBottom() {","lastModifiedDate":"2023-08-23"},{"lineNumber":125,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-23"},{"lineNumber":126,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":127,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SungMatt":127}},{"path":"src/main/java/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":" Parser() {}","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":" /*public static Task parseInput(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" String[] details \u003d input.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":" String command \u003d details[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" }*/","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" public static Task parseFile(String saveString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" String[] details \u003d saveString.split(\" \\\\| \");","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" Task newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" switch (details[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Todo(details[2], Boolean.parseBoolean(details[1]));","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Deadline(details[2], Boolean.parseBoolean(details[1]), details[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Event(details[2], Boolean.parseBoolean(details[1]), details[3], details[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" // Should throw an error here, maybe a can\u0027t read error?","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Todo(\"Oops, no details!\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Yikes, your savefile had some issues!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Todo(\"Oops, no details!\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" return newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" * Gets a boolean value from a String-represented 1 or 0.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" * @params String Done state as represented by 1 or 0","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" * @return True or False","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" public static boolean getBoolean(String value)","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" return (value!\u003d\"0\");","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SungMatt":46}},{"path":"src/main/java/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":"import java.io.File; // Import the File class","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"import java.io.IOException; // Import the IOException class to handle errors","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"import java.io.FileNotFoundException; // Import this class to handle errors","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":"import java.io.FileWriter; // Import the FileWriter class","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" protected TaskList data;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" private BufferedReader myReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" private Path dataPath;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" private static final String SAVE_NAME \u003d \"mattbot.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" private static final String SAVE_FOLDER \u003d \"data/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" public Storage() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" dataPath \u003d Paths.get(SAVE_FOLDER + SAVE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" if (!Files.exists(dataPath)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" Files.createDirectory(Paths.get(SAVE_FOLDER));","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" Files.createFile(dataPath);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" myReader \u003d Files.newBufferedReader(dataPath);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" // myReader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" * Loads list of tasks from the earlier specified filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" * @return List of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" public TaskList load() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" while (true) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" String nextLine \u003d myReader.readLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" if (nextLine \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" taskList.addTask(Parser.parseFile(nextLine));","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" return data;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" public void writeBack(TaskList tL) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" // Format should be in","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":" // [Type] | [isDone] | Name | startDate | endDate","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":" data \u003d tL;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":" ArrayList\u003cTask\u003e aLTask \u003d tL.getTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":" ArrayList\u003cString\u003e toWrite \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" for (int i \u003d 0; i \u003c aLTask.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":" Task t \u003d aLTask.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":" toWrite.add(t.toFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"SungMatt"},"content":" Files.delete(dataPath);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SungMatt"},"content":" Files.write(dataPath, toWrite);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SungMatt"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, I\u0027ve failed to write the save file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"SungMatt"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SungMatt":76}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":" protected String name;","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" Task(String name, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" public String showStatus() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" public String showName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" return this.name;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" public abstract String identifier();","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" public abstract String toFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" public String showStatusAsFile() { return (isDone ? \"1\" : \"0\"); }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" return String.format(\"[%s] [%s] %s\", this.identifier(), this.showStatus(), this.showName());","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"SungMatt":33}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" TaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":" tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" * Adds new task to list.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" * @params t Task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" * Removes task specified by index from list.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" * @params idx 1-based index of task to be removed.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" public void removeTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" tasks.remove(idx - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" * Marks task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" * @params idx 1-based index of task to be marked as complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" public void markTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.get(idx - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" * Marks task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" * @params idx 1-based index of task to be marked as incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" public void unmarkTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.get(idx - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" t.markAsNotDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" * Returns size of task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" * Returns entire task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" * @return List of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":" public Task getTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" return tasks.get(idx - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SungMatt":63}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":" Todo(String name) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":" super(name, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" Todo(String name, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" public String identifier() {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" return \"T\";","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" * Returns String form for storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" * @returns String for storage format.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" public String toFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" return identifier() + \" | \" + showStatusAsFile() + \" | \" + showName();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":21}},{"path":"src/main/java/commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"public enum commands {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":" EVENT,","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" LIST,","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":" BYE,","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" MARK,","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":" UNMARK","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":9}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"todo Eat supper","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"deadline CS2103 Homework /by Tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"event CS1010S Tutorial /from 1pm tomorrow /to 2pm tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":5}},{"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":"SungMatt"},"content":"java -classpath ../bin MattBot \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":{"SungMatt":1,"-":37}}] +[{"path":"src/main/java/MattBot/MattBot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"import MattBot.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"import MattBot.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"import MattBot.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-22"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"import java.util.List;","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":"public class MattBot {","lastModifiedDate":"2023-08-22"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" private static final String NAME \u003d \"MattBot\";","lastModifiedDate":"2023-08-22"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" private static Storage mattmory;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" private static TaskList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" private static DateTimeFormatter dTFormat \u003d DateTimeFormatter.ofPattern(\"yyyyMMdd\u0027T\u0027HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-22"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" // Load save file","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" // List\u003cTask\u003e taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" mattmory \u003d new Storage();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" tasks \u003d mattmory.load();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" tasks \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" /*String logo \u003d \" ____ _ \\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" + \"| _ \\\\ _ _| | _____ \\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" + \"| | | | | | | |/ / _ \\\\\\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" + \"| |_| | |_| | \u003c __/\\n\"","lastModifiedDate":"2023-08-22"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" + \"|____/ \\\\__,_|_|\\\\_\\\\___|\\n\";","lastModifiedDate":"2023-08-22"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Hello from\\n\" + logo);*/","lastModifiedDate":"2023-08-22"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-22"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Hello! I\u0027m \" + NAME);","lastModifiedDate":"2023-08-22"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-08-22"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-22"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-22"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" String userInput;","lastModifiedDate":"2023-08-22"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" label:","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" while (true) {","lastModifiedDate":"2023-08-22"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" // Take user input in, and process user input","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" userInput \u003d sc.nextLine();","lastModifiedDate":"2023-08-22"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":" String command \u003d userInput.split(\" \",2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":" switch (command) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":" case \"bye\":","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Bye, Hope to see you soon!\");","lastModifiedDate":"2023-08-22"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":" break label;","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"SungMatt"},"content":" case \"list\":","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":66,"author":{"gitId":"SungMatt"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(i + 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SungMatt"},"content":" System.out.println(String.format(\"%d. %s\", i + 1, t));","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":70,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":71,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":72,"author":{"gitId":"SungMatt"},"content":" case \"mark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":73,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":74,"author":{"gitId":"SungMatt"},"content":" int taskId \u003d Integer.parseInt(userInput.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"SungMatt"},"content":" tasks.markTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Great job! You have completed the task \" + t.showName());","lastModifiedDate":"2023-08-23"},{"lineNumber":79,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":80,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":81,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":82,"author":{"gitId":"SungMatt"},"content":" case \"unmark\": {","lastModifiedDate":"2023-09-03"},{"lineNumber":83,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":84,"author":{"gitId":"SungMatt"},"content":" int taskId \u003d Integer.parseInt(userInput.split(\" \", 2)[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"SungMatt"},"content":" tasks.unmarkTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(taskId);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, you have uncompleted \" + t.showName());","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":91,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":92,"author":{"gitId":"SungMatt"},"content":" default: {","lastModifiedDate":"2023-09-03"},{"lineNumber":93,"author":{"gitId":"SungMatt"},"content":" int len \u003d userInput.split(\" \", 2).length;","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"SungMatt"},"content":" if (len \u003c\u003d 1) {","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, your input is bad.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"SungMatt"},"content":" System.out.println(command + \" requires an argument.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"SungMatt"},"content":" printTop();","lastModifiedDate":"2023-08-23"},{"lineNumber":102,"author":{"gitId":"SungMatt"},"content":" String arguments \u003d userInput.split(\" \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"SungMatt"},"content":" Task t;","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"SungMatt"},"content":" if (command.equals(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"SungMatt"},"content":" t \u003d new Todo(arguments);","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"SungMatt"},"content":" String name \u003d arguments.split(\" /by \", 2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"SungMatt"},"content":" String dueDate \u003d arguments.split(\" /by \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":114,"author":{"gitId":"SungMatt"},"content":" LocalDateTime dtDueDate \u003d LocalDateTime.parse(dueDate, dTFormat);","lastModifiedDate":"2023-09-03"},{"lineNumber":115,"author":{"gitId":"SungMatt"},"content":" t \u003d new Deadline(name, dtDueDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":116,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":119,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"SungMatt"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":121,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Your date is invalid. It should be in the form YYYYMMDDTHHMM. An example is 20231231T2359.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":122,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":123,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"SungMatt"},"content":" String name \u003d arguments.split(\" /from \", 2)[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"SungMatt"},"content":" String dates \u003d arguments.split(\" /from \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"SungMatt"},"content":" String startDate \u003d dates.split(\" /to \")[0];","lastModifiedDate":"2023-08-24"},{"lineNumber":127,"author":{"gitId":"SungMatt"},"content":" String endDate \u003d dates.split(\" /to \", 2)[1];","lastModifiedDate":"2023-08-24"},{"lineNumber":128,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"SungMatt"},"content":" LocalDateTime dtStartDate \u003d LocalDateTime.parse(startDate, dTFormat);","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"SungMatt"},"content":" LocalDateTime dtEndDate \u003d LocalDateTime.parse(endDate, dTFormat);","lastModifiedDate":"2023-09-03"},{"lineNumber":131,"author":{"gitId":"SungMatt"},"content":" t \u003d new Event(name, dtStartDate, dtEndDate);","lastModifiedDate":"2023-09-03"},{"lineNumber":132,"author":{"gitId":"SungMatt"},"content":" tasks.addTask(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I\u0027ve added this to your tasks: \");","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":136,"author":{"gitId":"SungMatt"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":137,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Your date is invalid. It should be in the form YYYYMMDDTHHMM. An example is 20231231T2359.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":138,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":139,"author":{"gitId":"SungMatt"},"content":" } else if (command.equals(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":140,"author":{"gitId":"SungMatt"},"content":" if (tasks.size() \u003d\u003d 0 || tasks.size() \u003c Integer.parseInt(arguments)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oops, you\u0027re deleting a task that doesn\u0027t exist.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":142,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":143,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":144,"author":{"gitId":"SungMatt"},"content":" t \u003d tasks.getTask(Integer.parseInt(arguments));","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I have removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":146,"author":{"gitId":"SungMatt"},"content":" System.out.println(t);","lastModifiedDate":"2023-08-24"},{"lineNumber":147,"author":{"gitId":"SungMatt"},"content":" tasks.removeTask(Integer.parseInt(arguments));","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"SungMatt"},"content":" mattmory.writeBack(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"SungMatt"},"content":" } else {","lastModifiedDate":"2023-08-24"},{"lineNumber":150,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"I didn\u0027t quite understand your input.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":151,"author":{"gitId":"SungMatt"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":152,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":153,"author":{"gitId":"SungMatt"},"content":" printBottom();","lastModifiedDate":"2023-08-23"},{"lineNumber":154,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-03"},{"lineNumber":155,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":156,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":157,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":158,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":159,"author":{"gitId":"SungMatt"},"content":" public static void printTop() {","lastModifiedDate":"2023-08-23"},{"lineNumber":160,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-23"},{"lineNumber":161,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":162,"author":{"gitId":"SungMatt"},"content":" public static void printBottom() {","lastModifiedDate":"2023-08-23"},{"lineNumber":163,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"____________________________________________________________\");","lastModifiedDate":"2023-08-23"},{"lineNumber":164,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":165,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"SungMatt":165}},{"path":"src/main/java/MattBot/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package MattBot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"import MattBot.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" public final static DateTimeFormatter DTFORMAT \u003d DateTimeFormatter.ofPattern(\"yyyyMMdd\u0027T\u0027HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" public Parser() {}","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" /*public static void parseInput(String input) {","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" String[] details \u003d input.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" String command \u003d details[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" } except (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Ahh! You need to give an input!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" switch (command) {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" case \"list\":","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" for (int i \u003d 0; i \u003c tasks.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.getTask(i + 1);","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" System.out.println(String.format(\"%d. %s\", i + 1, t));","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" }*/","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" public static Task parseFile(String saveString) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" String[] details \u003d saveString.split(\" \\\\| \");","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" Task newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" switch (details[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Todo(details[2], getBoolean(details[1]));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Deadline(details[2], getBoolean(details[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" LocalDateTime.parse(details[3], DTFORMAT));","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Event(details[2], getBoolean(details[1]),","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" LocalDateTime.parse(details[3],DTFORMAT) , LocalDateTime.parse(details[4],DTFORMAT));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":" // Should throw an error here, maybe a can\u0027t read error?","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Todo(\"Oops, no details!\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Yikes, your savefile had some issues!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" newTask \u003d new Todo(\"Oops, no details!\", true);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":" return newTask;","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":" * Gets a boolean value from a String-represented 1 or 0.","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SungMatt"},"content":" * @params String Done state as represented by 1 or 0","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SungMatt"},"content":" * @return True or False","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SungMatt"},"content":" public static boolean getBoolean(String value)","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SungMatt"},"content":" {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"SungMatt"},"content":" return (value.equals(\"1\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":70,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SungMatt":71}},{"path":"src/main/java/MattBot/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package MattBot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"import MattBot.Parser;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":"import java.io.File; // Import the File class","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":"import java.io.IOException; // Import the IOException class to handle errors","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":"import java.io.FileNotFoundException; // Import this class to handle errors","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":"import java.io.FileWriter; // Import the FileWriter class","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" protected TaskList data;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" private BufferedReader myReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" private Path dataPath;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" private static final String SAVE_NAME \u003d \"mattbot.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" private static final String SAVE_FOLDER \u003d \"data/\";","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" public Storage() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" dataPath \u003d Paths.get(SAVE_FOLDER + SAVE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" if (!Files.exists(dataPath)) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" Files.createDirectory(Paths.get(SAVE_FOLDER));","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" Files.createFile(dataPath);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" myReader \u003d Files.newBufferedReader(dataPath);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" // myReader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" * Loads list of tasks from the earlier specified filepath.","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" * @return List of tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" public TaskList load() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" while (true) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":" String nextLine \u003d myReader.readLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":" if (nextLine \u003d\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" taskList.addTask(Parser.parseFile(nextLine));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":" public TaskList getTaskList() {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":" return data;","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":" public void writeBack(TaskList tL) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SungMatt"},"content":" // Format should be in","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SungMatt"},"content":" // [Type] | [isDone] | Name | startDate | endDate","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"SungMatt"},"content":" data \u003d tL;","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SungMatt"},"content":" ArrayList\u003cTask\u003e aLTask \u003d tL.getTasks();","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SungMatt"},"content":" ArrayList\u003cString\u003e toWrite \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"SungMatt"},"content":" for (int i \u003d 0; i \u003c aLTask.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"SungMatt"},"content":" Task t \u003d aLTask.get(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"SungMatt"},"content":" toWrite.add(t.toFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"SungMatt"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"SungMatt"},"content":" Files.delete(dataPath);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"SungMatt"},"content":" Files.write(dataPath, toWrite);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"SungMatt"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"SungMatt"},"content":" System.out.println(\"Oh no, I\u0027ve failed to write the save file.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"SungMatt"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SungMatt":84}},{"path":"src/main/java/MattBot/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package MattBot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" protected ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" public TaskList() {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" tasks \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" * Adds new task to list.","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" * @params t Task to be added.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" tasks.add(t);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" * Removes task specified by index from list.","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" * @params idx 1-based index of task to be removed.","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" public void removeTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" tasks.remove(idx - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" * Marks task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" * @params idx 1-based index of task to be marked as complete.","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" public void markTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.get(idx - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" t.markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" * Marks task as not done.","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" * @params idx 1-based index of task to be marked as incomplete.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" public void unmarkTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" Task t \u003d tasks.get(idx - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" t.markAsNotDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" * Returns size of task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":" * Returns entire task list.","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" * @return List of tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":" **/","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":" public ArrayList\u003cTask\u003e getTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"SungMatt"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"SungMatt"},"content":" public Task getTask(int idx) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"SungMatt"},"content":" return tasks.get(idx - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"SungMatt":70}},{"path":"src/main/java/MattBot/commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package MattBot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"public enum commands {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":" TODO,","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":" DEADLINE,","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" EVENT,","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":" LIST,","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" BYE,","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":" MARK,","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" UNMARK","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":10}},{"path":"src/main/java/MattBot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package MattBot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import MattBot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" protected LocalDateTime date;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" public static final DateTimeFormatter DTFORMAT \u003d DateTimeFormatter.ofPattern(\"yyyyMMdd\u0027T\u0027HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" public Deadline(String name, LocalDateTime date) {","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" super(name, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" this.date \u003d date;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" public Deadline(String name, boolean isDone, LocalDateTime date ) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" this.date \u003d date;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" public LocalDateTime getDate() {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" return this.date;","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" * Returns a friendly version of the date.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" * @returns Date in form of May 12 2023 20:00","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" public String dateToString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" return this.date.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH\u0027:\u0027mm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" * Identifies itself as a Deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" * @returns Character to identify the type of Task.","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" public String identifier() {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" return \"D\";","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" * Returns String form for storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" * @returns String for storage format.","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":" public String toFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":" return identifier() + \" | \" + showStatusAsFile() + \" | \" + showName() + \" | \" + getDate().format(DTFORMAT);","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" return String.format(\"[%s] [%s] %s (by: %s)\", this.identifier(), this.showStatus(), this.showName(), dateToString());","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":56}},{"path":"src/main/java/MattBot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package MattBot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"import java.time.temporal.ChronoUnit;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" protected LocalDateTime startDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" protected LocalDateTime endDate;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" public static final DateTimeFormatter DTFORMAT \u003d DateTimeFormatter.ofPattern(\"yyyyMMdd\u0027T\u0027HHmm\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" public Event(String name, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" super(name, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" public Event(String name, boolean isDone, LocalDateTime startDate, LocalDateTime endDate) {","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":" public LocalDateTime getStartDate() {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" return this.startDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" public LocalDateTime getEndDate() {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" return this.endDate;","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" public String identifier() {","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":" return \"E\";","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" * Returns a friendly version of the start date.","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"SungMatt"},"content":" * @returns Start Date in form of May 12 2023 20:00","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"SungMatt"},"content":" public String startDateToString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"SungMatt"},"content":" return this.startDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH\u0027:\u0027mm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"SungMatt"},"content":" * Returns a friendly version of the end date.","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"SungMatt"},"content":" * @returns End Date in form of May 12 2023 20:00","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"SungMatt"},"content":" public String endDateToString() {","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"SungMatt"},"content":" return this.endDate.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy HH\u0027:\u0027mm\"));","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"SungMatt"},"content":" * Returns String form for storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"SungMatt"},"content":" * @returns String for storage format.","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"SungMatt"},"content":" public String toFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"SungMatt"},"content":" return identifier() + \" | \" + showStatusAsFile() + \" | \" + showName() + \" | \" + getStartDate().format(DTFORMAT)","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"SungMatt"},"content":" + \" | \" + getEndDate().format(DTFORMAT);","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"SungMatt"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"SungMatt"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"SungMatt"},"content":" return String.format(\"[%s] [%s] %s (from: %s to: %s)\", this.identifier(), this.showStatus(), this.showName(),","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"SungMatt"},"content":" this.startDateToString(), this.endDateToString());","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":64}},{"path":"src/main/java/MattBot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package MattBot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":" protected String name;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" public void markAsNotDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" public String showStatus() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" return (isDone ? \"X\" : \" \");","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"SungMatt"},"content":" public String showName() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"SungMatt"},"content":" return this.name;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"SungMatt"},"content":" public abstract String identifier();","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"SungMatt"},"content":" public abstract String toFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"SungMatt"},"content":" public String showStatusAsFile() { return (isDone ? \"1\" : \"0\"); }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"SungMatt"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"SungMatt"},"content":" return String.format(\"[%s] [%s] %s\", this.identifier(), this.showStatus(), this.showName());","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"SungMatt":35}},{"path":"src/main/java/MattBot/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"package MattBot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":" public Todo(String name) {","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":" super(name, false);","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"SungMatt"},"content":" public Todo(String name, boolean isDone) {","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"SungMatt"},"content":" super(name, isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"SungMatt"},"content":" public String identifier() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"SungMatt"},"content":" return \"T\";","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"SungMatt"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"SungMatt"},"content":" /*","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"SungMatt"},"content":" * Returns String form for storage.","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"SungMatt"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"SungMatt"},"content":" * @returns String for storage format.","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"SungMatt"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"SungMatt"},"content":" public String toFile() {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"SungMatt"},"content":" return identifier() + \" | \" + showStatusAsFile() + \" | \" + showName();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"SungMatt"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"SungMatt"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"SungMatt"},"content":"todo Eat supper","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"SungMatt"},"content":"deadline CS2103 Homework /by Tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"SungMatt"},"content":"event CS1010S Tutorial /from 1pm tomorrow /to 2pm tomorrow","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"SungMatt"},"content":"list","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"SungMatt"},"content":"bye","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"SungMatt":5}},{"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":"SungMatt"},"content":"java -classpath ../bin MattBot \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":{"SungMatt":1,"-":37}}] diff --git a/SungMatt_ip_master/commits.json b/SungMatt_ip_master/commits.json index 314997d5..0e40ecbe 100644 --- a/SungMatt_ip_master/commits.json +++ b/SungMatt_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"SungMatt":[{"date":"2023-08-22","commitResults":[{"hash":"db36ba53d7d4c1cf2d0204c2ba477aa63f4ffa04","isMergeCommit":false,"messageTitle":"Modify name of DukeBot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"88a0916917f38fd9b14da93e33559fcbbde62fa6","isMergeCommit":false,"messageTitle":"Add echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"8bfebd580531ae277f82ea8e8cc26bf98f055a10","isMergeCommit":false,"messageTitle":"Add basic task adding functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":8}}}]},{"date":"2023-08-23","commitResults":[{"hash":"ba95f3baa8580b259274838e514bd4876e677197","isMergeCommit":false,"messageTitle":"Add Task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"8206b6ad21e26de22a761b71c3bde9ab85d2d81e","isMergeCommit":false,"messageTitle":"Add marking and unmarking","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bfa3ad4587864117d3fd120e37ddf65ca9d95326","isMergeCommit":false,"messageTitle":"Add functionality for multiple types of events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":8}}},{"hash":"bc00219431539a837dedb763b8da8cae91acd922","isMergeCommit":false,"messageTitle":"Fix list type behavior","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"cf971d647d3702db6be4425c672225995d110078","isMergeCommit":false,"messageTitle":"Add autotesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"sh":{"insertions":2,"deletions":2}}},{"hash":"bdd2a1d6f91a625a8e03144da42e694360764d07","isMergeCommit":false,"messageTitle":"Add error finding functionality","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"5b759a22c11bde20c8aa0b93b652e31149112072","isMergeCommit":false,"messageTitle":"Add removal function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"4c3ba546b08ffacdba8b215f69c6f94941744165","isMergeCommit":false,"messageTitle":"Add enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"2934061a437d4f57acf14a5c7dbc6ca7be521191","isMergeCommit":false,"messageTitle":"Add save functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":268,"deletions":22}}}]}]},"authorFileTypeContributionMap":{"SungMatt":{"java":443,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":5}},"authorContributionVariance":{"SungMatt":5807.625},"authorDisplayNameMap":{"SungMatt":"CS2103-T16-1 MATT..IANG"}} +{"authorDailyContributionsMap":{"SungMatt":[{"date":"2023-08-22","commitResults":[{"hash":"db36ba53d7d4c1cf2d0204c2ba477aa63f4ffa04","isMergeCommit":false,"messageTitle":"Modify name of DukeBot","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":10}}},{"hash":"88a0916917f38fd9b14da93e33559fcbbde62fa6","isMergeCommit":false,"messageTitle":"Add echo functionality","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":15,"deletions":1}}},{"hash":"8bfebd580531ae277f82ea8e8cc26bf98f055a10","isMergeCommit":false,"messageTitle":"Add basic task adding functionality","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":20,"deletions":8}}}]},{"date":"2023-08-23","commitResults":[{"hash":"ba95f3baa8580b259274838e514bd4876e677197","isMergeCommit":false,"messageTitle":"Add Task functionality","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":25,"deletions":0}}},{"hash":"8206b6ad21e26de22a761b71c3bde9ab85d2d81e","isMergeCommit":false,"messageTitle":"Add marking and unmarking","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":10}}}]},{"date":"2023-08-24","commitResults":[{"hash":"bfa3ad4587864117d3fd120e37ddf65ca9d95326","isMergeCommit":false,"messageTitle":"Add functionality for multiple types of events","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":8}}},{"hash":"bc00219431539a837dedb763b8da8cae91acd922","isMergeCommit":false,"messageTitle":"Fix list type behavior","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":1,"deletions":1}}},{"hash":"cf971d647d3702db6be4425c672225995d110078","isMergeCommit":false,"messageTitle":"Add autotesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":5,"deletions":0},"sh":{"insertions":2,"deletions":2}}},{"hash":"bdd2a1d6f91a625a8e03144da42e694360764d07","isMergeCommit":false,"messageTitle":"Add error finding functionality","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":8,"deletions":0}}},{"hash":"5b759a22c11bde20c8aa0b93b652e31149112072","isMergeCommit":false,"messageTitle":"Add removal function","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":3}}},{"hash":"4c3ba546b08ffacdba8b215f69c6f94941744165","isMergeCommit":false,"messageTitle":"Add enums","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":0}}}]},{"date":"2023-09-02","commitResults":[{"hash":"2934061a437d4f57acf14a5c7dbc6ca7be521191","isMergeCommit":false,"messageTitle":"Add save functionality","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"java":{"insertions":268,"deletions":22}}}]},{"date":"2023-09-03","commitResults":[{"hash":"ad06e0f4600385085bcbd08014cd8222fba07cc7","isMergeCommit":false,"messageTitle":"Add DateTime functionality","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":28}}},{"hash":"4243611b23bc5bcabea3b7b7035a690186896cb6","isMergeCommit":false,"messageTitle":"Make code pretty","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":115,"deletions":97}}},{"hash":"b4939f261f70fcd3bd6d80913ad507619430702c","isMergeCommit":false,"messageTitle":"Restructure directories","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":0,"deletions":0}}},{"hash":"8fce86bad7cbc9c3a34433b4305aa0291ce6b3e2","isMergeCommit":false,"messageTitle":"Add Packaging","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":9}}},{"hash":"4eff5e2e9ef9f17258532fad56c56e71c6d420cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027add-gradle-support\u0027 Add gradle support","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"SungMatt":{"java":577,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":5}},"authorContributionVariance":{"SungMatt":12902.525},"authorDisplayNameMap":{"SungMatt":"CS2103-T16-1 MATT..IANG"}} diff --git a/VN-Hao_ip_master/authorship.json b/VN-Hao_ip_master/authorship.json index a63f118c..c4198644 100644 --- a/VN-Hao_ip_master/authorship.json +++ b/VN-Hao_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"src/main/java/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"public class Bot {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" private final String botName;","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" private final TaskList list;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" private final String HORIZONTAL_LINE","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" private final File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" public Bot(String botName, File file) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" this.botName \u003d botName;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" this.file \u003d file;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" this.list \u003d new TaskList();","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" loadData();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot read file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" public void greeting() {","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Hello! I\u0027m \" + this.botName);","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" public void markTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(taskId, true);","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + this.list.showTask(taskId));","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" public void unmarkTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(taskId, false);","lastModifiedDate":"2023-08-25"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + this.list.showTask(taskId));","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" private void notifyTaskAdded(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Now you have \" + this.list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" public void addTask(String str) {","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" Task task \u003d new Todo(str);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" notifyTaskAdded(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" public void addTask(String str, String deadline) {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" Task task \u003d new Deadline(str, deadline);","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" notifyTaskAdded(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" public void addTask(String str, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" Task task \u003d new Event(str, startTime, endTime);","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" notifyTaskAdded(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":" public void deleteTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + this.list.deleteTask(taskId));","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Now you have \" + this.list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":121,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":122,"author":{"gitId":"VN-Hao"},"content":" public void showTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":124,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-25"},{"lineNumber":125,"author":{"gitId":"VN-Hao"},"content":" System.out.println(this.list);","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-25"},{"lineNumber":128,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":129,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":130,"author":{"gitId":"VN-Hao"},"content":" public void goodBye() {","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":132,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"VN-Hao"},"content":" // Updates the text file whenever there is a change to the TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"VN-Hao"},"content":" private void updateFile() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"VN-Hao"},"content":" FileWriter fw \u003d new FileWriter(this.file.getAbsolutePath());","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"VN-Hao"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c this.list.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"VN-Hao"},"content":" content.append(this.list.showTask(i + 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"VN-Hao"},"content":" if (i \u003c this.list.size() - 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"VN-Hao"},"content":" content.append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"VN-Hao"},"content":" fw.write(content.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"VN-Hao"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"VN-Hao"},"content":" // Loads data from text file to the TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"VN-Hao"},"content":" private void loadData() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"VN-Hao"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"VN-Hao"},"content":" String task;","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"VN-Hao"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"VN-Hao"},"content":" task \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(1) \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(new Todo(task.substring(7)));","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(this.list.size(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"VN-Hao"},"content":" } else if (task.charAt(1) \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"VN-Hao"},"content":" idx++;","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(new Deadline(task.substring(7, idx - 4),","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx + 2, task.length() - 1)));","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(this.list.size(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"VN-Hao"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx1) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx2) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(new Event(task.substring(7, idx1 - 6),","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx1 + 2, idx2 - 3),","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx2 + 2, task.length() - 1)));","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(this.list.size(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":192}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":" private final String deadline;","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" public Deadline(String task, String deadline) {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" this.deadline \u003d deadline;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" String checkBox \u003d this.done ? \"[D][X] \" : \"[D][ ] \";","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" String description \u003d String.format(\"%s (by: %s)\", this.task, this.deadline);","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" return checkBox + description;","lastModifiedDate":"2023-08-25"},{"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/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":" private final String startTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":" private final String endTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" public Event(String task, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" String checkBox \u003d this.done ? \"[E][X] \" : \"[E][ ] \";","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"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":15,"author":{"gitId":"VN-Hao"},"content":" return checkBox + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":17}},{"path":"src/main/java/Qi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"public class Qi {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" // Get the data for the list","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" File file \u003d new File(\"data//list.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" File directory \u003d file.getParentFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" // Create directory to the file if it does not exist","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" directory.mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot create file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" Bot qi \u003d new Bot(\"Qi\", file);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" qi.greeting();","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" String str \u003d sc.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" if (str.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" if (str.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" qi.showTask();","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"mark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(str.substring(5));","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" qi.markTask(taskId);","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"unmark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-08-25"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" qi.unmarkTask(taskId);","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"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":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" String task \u003d str.substring(5);","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" qi.addTask(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" // find the first slash","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 9;","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" while (idx \u003c str.length() \u0026\u0026 str.charAt(idx) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" idx++;","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" String task \u003d str.substring(9, idx - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" String deadline \u003d str.substring(idx + 4);","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" qi.addTask(task, deadline);","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" // find the first slash","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 6;","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" while (idx1 \u003c str.length() \u0026\u0026 str.charAt(idx1) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" // find the second slash","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" while (idx2 \u003c str.length() \u0026\u0026 str.charAt(idx2) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" String task \u003d str.substring(6, idx1 - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" String startTime \u003d str.substring(idx1 + 6, idx2 - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" String endTime \u003d str.substring(idx2 + 4);","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" qi.addTask(task, startTime, endTime);","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-08-25"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":" qi.deleteTask(taskId);","lastModifiedDate":"2023-08-25"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":" qi.goodBye();","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"VN-Hao":119}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":" protected String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":" protected boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" protected Task(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" public void mark(boolean status) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" this.done \u003d status;","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"}],"authorContributionMap":{"VN-Hao":13}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" public TaskList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" this.taskList.add(t);","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":" public void mark(int id, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" this.taskList.get(id - 1).mark(isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" public String showTask(int id) {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.get(id - 1).toString();","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"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" public Task deleteTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.remove(taskId - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" StringBuilder ans \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" int id \u003d i + 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" String temp \u003d \" \" + id + \". \" + showTask(id);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" ans.append(temp);","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" if (i \u003c this.taskList.size() - 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" ans.append(\u0027\\n\u0027);","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" return ans.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":43}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":" public Todo(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" if (this.done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" return \"[T][X] \" + this.task;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" return \"[T][ ] \" + this.task;","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"}],"authorContributionMap":{"VN-Hao":13}},{"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":"src/main/java/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","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":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":"public class Bot {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" private final String botName;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" private final TaskList list;","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" private final String HORIZONTAL_LINE","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" \u003d \" ____________________________________________________________\";","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" private final File file;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" public Bot(String botName, File file) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" this.botName \u003d botName;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" this.file \u003d file;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" this.list \u003d new TaskList();","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" loadData();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot read file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" public void greeting() {","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Hello! I\u0027m \" + this.botName);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" What can I do for you?\");","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" public void markTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(taskId, true);","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + this.list.showTask(taskId));","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" public void unmarkTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(taskId, false);","lastModifiedDate":"2023-08-25"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + this.list.showTask(taskId));","lastModifiedDate":"2023-08-25"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" private void notifyTaskAdded(Task task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + task);","lastModifiedDate":"2023-08-24"},{"lineNumber":69,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Now you have \" + this.list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":70,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" public void addTask(String str) {","lastModifiedDate":"2023-08-24"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" Task task \u003d new Todo(str);","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" notifyTaskAdded(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" public void addTask(String str, LocalDate deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" Task task \u003d new Deadline(str, deadline);","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":" notifyTaskAdded(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" public void addTask(String str, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" Task task \u003d new Event(str, startTime, endTime);","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":" notifyTaskAdded(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" public void deleteTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" \" + this.list.deleteTask(taskId));","lastModifiedDate":"2023-08-25"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Now you have \" + this.list.size() + \" tasks in the list.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"VN-Hao"},"content":" updateFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot write to file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":123,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":124,"author":{"gitId":"VN-Hao"},"content":" public void showTask() {","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":126,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Here are the tasks in your list:\");","lastModifiedDate":"2023-08-25"},{"lineNumber":127,"author":{"gitId":"VN-Hao"},"content":" System.out.println(this.list);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":129,"author":{"gitId":"VN-Hao"},"content":" System.out.println();","lastModifiedDate":"2023-08-25"},{"lineNumber":130,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":131,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":132,"author":{"gitId":"VN-Hao"},"content":" public void goodBye() {","lastModifiedDate":"2023-08-24"},{"lineNumber":133,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":134,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-24"},{"lineNumber":135,"author":{"gitId":"VN-Hao"},"content":" System.out.println(HORIZONTAL_LINE);","lastModifiedDate":"2023-08-25"},{"lineNumber":136,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":137,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"VN-Hao"},"content":" // Updates the text file whenever there is a change to the TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"VN-Hao"},"content":" private void updateFile() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"VN-Hao"},"content":" FileWriter fw \u003d new FileWriter(this.file.getAbsolutePath());","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"VN-Hao"},"content":" StringBuilder content \u003d new StringBuilder();","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c this.list.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"VN-Hao"},"content":" content.append(this.list.showTask(i + 1));","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"VN-Hao"},"content":" if (i \u003c this.list.size() - 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"VN-Hao"},"content":" content.append(\u0027\\n\u0027);","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"VN-Hao"},"content":" fw.write(content.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"VN-Hao"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"VN-Hao"},"content":" // Loads data from text file to the TaskList","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"VN-Hao"},"content":" private void loadData() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"VN-Hao"},"content":" Scanner sc \u003d new Scanner(this.file);","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"VN-Hao"},"content":" String task;","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"VN-Hao"},"content":" while (sc.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"VN-Hao"},"content":" task \u003d sc.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(1) \u003d\u003d \u0027T\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(new Todo(task.substring(7)));","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(this.list.size(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"VN-Hao"},"content":" } else if (task.charAt(1) \u003d\u003d \u0027D\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"VN-Hao"},"content":" idx++;","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(new Deadline(task.substring(7, idx - 4),","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"VN-Hao"},"content":" LocalDate.parse(task.substring(idx + 2, task.length() - 1),","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"VN-Hao"},"content":" DateTimeFormatter.ofPattern(\"MMM dd yyyy\"))));","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(this.list.size(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"VN-Hao"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx1) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"VN-Hao"},"content":" while (task.charAt(idx2) !\u003d \u0027:\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"VN-Hao"},"content":" this.list.addTask(new Event(task.substring(7, idx1 - 6),","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx1 + 2, idx2 - 3),","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"VN-Hao"},"content":" task.substring(idx2 + 2, task.length() - 1)));","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"VN-Hao"},"content":" if (task.charAt(4) \u003d\u003d \u0027X\u0027) {","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"VN-Hao"},"content":" this.list.mark(this.list.size(), true);","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":195}},{"path":"src/main/java/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" private final LocalDate deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public Deadline(String task, LocalDate deadline) {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" this.deadline \u003d deadline;","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":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" String checkBox \u003d this.done ? \"[D][X] \" : \"[D][ ] \";","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" String description \u003d String.format(\"%s (by: %s)\", this.task,","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" this.deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\")));","lastModifiedDate":"2023-09-02"},{"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/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":" private final String startTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":" private final String endTime;","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" public Event(String task, String startTime, String endTime) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" this.startTime \u003d startTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" this.endTime \u003d endTime;","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" String checkBox \u003d this.done ? \"[E][X] \" : \"[E][ ] \";","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"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":15,"author":{"gitId":"VN-Hao"},"content":" return checkBox + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":17}},{"path":"src/main/java/Qi.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":"public class Qi {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" // Get the data for the list","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" File file \u003d new File(\"data//list.txt\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" File directory \u003d file.getParentFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"VN-Hao"},"content":" // Create directory to the file if it does not exist","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"VN-Hao"},"content":" if (!directory.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"VN-Hao"},"content":" directory.mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"VN-Hao"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\"Cannot create file!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":" Bot qi \u003d new Bot(\"Qi\", file);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" qi.greeting();","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":" while (true) {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" String str \u003d sc.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" if (str.equals(\"bye\")) {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" if (str.equals(\"list\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" qi.showTask();","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"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":" if (str.startsWith(\"mark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(str.substring(5));","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" qi.markTask(taskId);","lastModifiedDate":"2023-08-25"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"unmark \")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"VN-Hao"},"content":" qi.unmarkTask(taskId);","lastModifiedDate":"2023-08-25"},{"lineNumber":49,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"todo\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":53,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":54,"author":{"gitId":"VN-Hao"},"content":" String task \u003d str.substring(5);","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"VN-Hao"},"content":" qi.addTask(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":56,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ☹ OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":62,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"deadline\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":65,"author":{"gitId":"VN-Hao"},"content":" // find the first slash","lastModifiedDate":"2023-08-24"},{"lineNumber":66,"author":{"gitId":"VN-Hao"},"content":" int idx \u003d 9;","lastModifiedDate":"2023-08-24"},{"lineNumber":67,"author":{"gitId":"VN-Hao"},"content":" while (idx \u003c str.length() \u0026\u0026 str.charAt(idx) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-08-24"},{"lineNumber":68,"author":{"gitId":"VN-Hao"},"content":" idx++;","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-02"},{"lineNumber":71,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":72,"author":{"gitId":"VN-Hao"},"content":" String task \u003d str.substring(9, idx - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":73,"author":{"gitId":"VN-Hao"},"content":" String deadline \u003d str.substring(idx + 4);","lastModifiedDate":"2023-08-24"},{"lineNumber":74,"author":{"gitId":"VN-Hao"},"content":" qi.addTask(task, LocalDate.parse(deadline));","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":76,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":77,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ☹ OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":78,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":79,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":80,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":81,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":82,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":83,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"event\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":84,"author":{"gitId":"VN-Hao"},"content":" // find the first slash","lastModifiedDate":"2023-08-24"},{"lineNumber":85,"author":{"gitId":"VN-Hao"},"content":" int idx1 \u003d 6;","lastModifiedDate":"2023-08-24"},{"lineNumber":86,"author":{"gitId":"VN-Hao"},"content":" while (idx1 \u003c str.length() \u0026\u0026 str.charAt(idx1) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-08-24"},{"lineNumber":87,"author":{"gitId":"VN-Hao"},"content":" idx1++;","lastModifiedDate":"2023-08-24"},{"lineNumber":88,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":89,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":90,"author":{"gitId":"VN-Hao"},"content":" // find the second slash","lastModifiedDate":"2023-08-24"},{"lineNumber":91,"author":{"gitId":"VN-Hao"},"content":" int idx2 \u003d idx1 + 1;","lastModifiedDate":"2023-08-24"},{"lineNumber":92,"author":{"gitId":"VN-Hao"},"content":" while (idx2 \u003c str.length() \u0026\u0026 str.charAt(idx2) !\u003d \u0027/\u0027) {","lastModifiedDate":"2023-08-24"},{"lineNumber":93,"author":{"gitId":"VN-Hao"},"content":" idx2++;","lastModifiedDate":"2023-08-24"},{"lineNumber":94,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"VN-Hao"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"VN-Hao"},"content":" String task \u003d str.substring(6, idx1 - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"VN-Hao"},"content":" String startTime \u003d str.substring(idx1 + 6, idx2 - 1);","lastModifiedDate":"2023-08-24"},{"lineNumber":99,"author":{"gitId":"VN-Hao"},"content":" String endTime \u003d str.substring(idx2 + 4);","lastModifiedDate":"2023-08-24"},{"lineNumber":100,"author":{"gitId":"VN-Hao"},"content":" qi.addTask(task, startTime, endTime);","lastModifiedDate":"2023-08-24"},{"lineNumber":101,"author":{"gitId":"VN-Hao"},"content":" } catch (StringIndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ☹ OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"VN-Hao"},"content":" if (str.startsWith(\"delete\")) {","lastModifiedDate":"2023-08-24"},{"lineNumber":110,"author":{"gitId":"VN-Hao"},"content":" int taskId \u003d Integer.parseInt(str.substring(7));","lastModifiedDate":"2023-08-25"},{"lineNumber":111,"author":{"gitId":"VN-Hao"},"content":" qi.deleteTask(taskId);","lastModifiedDate":"2023-08-25"},{"lineNumber":112,"author":{"gitId":"VN-Hao"},"content":" continue;","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":114,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":115,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"VN-Hao"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-08-24"},{"lineNumber":118,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"VN-Hao"},"content":" qi.goodBye();","lastModifiedDate":"2023-08-24"},{"lineNumber":120,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":121,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"VN-Hao":121}},{"path":"src/main/java/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"public class Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":" protected String task;","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":" protected boolean done;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":" protected Task(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" this.task \u003d task;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" this.done \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" public void mark(boolean status) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" this.done \u003d status;","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"}],"authorContributionMap":{"VN-Hao":13}},{"path":"src/main/java/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":"public class TaskList {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" private final ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" public TaskList() {","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" this.taskList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" public void addTask(Task t) {","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" this.taskList.add(t);","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":" public void mark(int id, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"VN-Hao"},"content":" this.taskList.get(id - 1).mark(isDone);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"VN-Hao"},"content":" public String showTask(int id) {","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.get(id - 1).toString();","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"},{"lineNumber":22,"author":{"gitId":"VN-Hao"},"content":" public Task deleteTask(int taskId) {","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.remove(taskId - 1);","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"VN-Hao"},"content":" public int size() {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"VN-Hao"},"content":" return this.taskList.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"VN-Hao"},"content":" StringBuilder ans \u003d new StringBuilder();","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"VN-Hao"},"content":" for (int i \u003d 0; i \u003c this.taskList.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"VN-Hao"},"content":" int id \u003d i + 1;","lastModifiedDate":"2023-08-25"},{"lineNumber":35,"author":{"gitId":"VN-Hao"},"content":" String temp \u003d \" \" + id + \". \" + showTask(id);","lastModifiedDate":"2023-08-25"},{"lineNumber":36,"author":{"gitId":"VN-Hao"},"content":" ans.append(temp);","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"VN-Hao"},"content":" if (i \u003c this.taskList.size() - 1) {","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"VN-Hao"},"content":" ans.append(\u0027\\n\u0027);","lastModifiedDate":"2023-08-25"},{"lineNumber":39,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"VN-Hao"},"content":" return ans.toString();","lastModifiedDate":"2023-08-25"},{"lineNumber":42,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"VN-Hao"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"VN-Hao":43}},{"path":"src/main/java/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"VN-Hao"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"VN-Hao"},"content":" public Todo(String task) {","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"VN-Hao"},"content":" super(task);","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"VN-Hao"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"VN-Hao"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"VN-Hao"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"VN-Hao"},"content":" if (this.done) {","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"VN-Hao"},"content":" return \"[T][X] \" + this.task;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"VN-Hao"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"VN-Hao"},"content":" return \"[T][ ] \" + this.task;","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"}],"authorContributionMap":{"VN-Hao":13}},{"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 3164ac19..e429b624 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":{}}]}]},"authorFileTypeContributionMap":{"VN-Hao":{"java":412,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":6}},"authorContributionVariance":{"VN-Hao":9999.3125},"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":{}}]}]},"authorFileTypeContributionMap":{"VN-Hao":{"java":421,"md":0,"fxml":0,"sh":0,"bat":1,"gradle":0,"txt":6}},"authorContributionVariance":{"VN-Hao":10296.182},"authorDisplayNameMap":{"VN-Hao":"CS2103T-T13-2 NGUY.. HAO"}} diff --git a/WeeMingQing_ip_master/authorship.json b/WeeMingQing_ip_master/authorship.json index 503f6df7..bb6a07dd 100644 --- a/WeeMingQing_ip_master/authorship.json +++ b/WeeMingQing_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"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":"WeeMingQing"},"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":{"WeeMingQing":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":"WeeMingQing"},"content":" mainClass.set(\"duke.main.Duke\")","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WeeMingQing":1,"-":41}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Todos;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" private String commandType;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" private String startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" private String endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" public AddCommand(String commandType, String description, String startDate, String endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" Task temp \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" switch(commandType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" temp \u003d new Todos(this.description);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" temp \u003d new Deadlines(this.description, this.endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\t\" + \"Please ensure that your date is in \\\"yyyy-MM-dd HH:mm\\\"\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" \" format. Put 00:00 if time does not matter.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" temp \u003d new Events(this.description, this.startDate, this.endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\t\" + \"Please ensure that your date is in \\\"yyyy-MM-dd HH:mm\\\"\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" \" format. Put 00:00 if time does not matter.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":" taskList.addTask(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":" storage.writeData(taskList.convertToFileContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\tGot it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\" + taskList.getTask(taskList.size() - 1).printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":71}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":21}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" public abstract void execute(TaskList taskList, Storage storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" public abstract void printCommand(TaskList taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public abstract boolean isContinue();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":12}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" taskList.removeTask(this.index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" storage.writeData(taskList.convertToFileContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" Task temp \u003d taskList.getTask(this.index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\tNoted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\" + temp.printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\tNow you have \" + (taskList.size() - 1) + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":33}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\"+ (i+1) + \". \" + taskList.getTask(i).printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":25}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" taskList.getTask(this.index - 1).markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" storage.writeData(taskList.convertToFileContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\tNice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\" + taskList.getTask(this.index - 1).printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":30}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" taskList.getTask(this.index - 1).markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" storage.writeData(taskList.convertToFileContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\tOK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\" + taskList.getTask(this.index - 1).printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":30}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"/** This class handles exceptions from duke.main.Duke.*/","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":" public DukeException(String errorMsg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" return \"☹ OOPS!!! \" + super.getMessage();","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":12}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":" public InvalidCommandException(String errorMsg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":7}},{"path":"src/main/java/duke/exception/InvalidSyntaxException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"public class InvalidSyntaxException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":" public InvalidSyntaxException(String errorMsg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":7}},{"path":"src/main/java/duke/main/DateFormatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"public class DateFormatter {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" public LocalDateTime stringToDate(String date) throws DateTimeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" String dateFormat \u003d \"yyyy-MM-dd HH:mm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(dateFormat);","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" return dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" public String dateToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d dateTime.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" public String saveDateToFile(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d dateTime.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" public String dateTimeToDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" LocalDate date \u003d dateTime.toLocalDate();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d date.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" public String dateTimeToTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" LocalTime time \u003d dateTime.toLocalTime();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d time.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":42}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" private static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" boolean listen \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" /** Captures user input*/","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" Scanner jonBird \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" /** Stores user input*/","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" TaskList inputList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" /** User input*/","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" String input \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" inputList \u003d storage.loadData();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" ui.runProgram();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" while (listen) {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" input \u003d jonBird.nextLine().trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" String[] inp \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" Command currentCommand \u003d parser.parse(inp, inputList);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" currentCommand.execute(inputList, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" listen \u003d currentCommand.isContinue();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\t\" + e.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\t\" + \"Please ensure that your date is in \\\"yyyy-MM-dd HH:mm\\\"\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" \" format. Put 00:00 if time does not matter.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" jonBird.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":44,"-":2}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.InvalidSyntaxException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" public enum ValidCommand {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" BYE, LIST, TODO, DEADLINE, EVENT, MARK, UNMARK, DELETE, UNKNOWN","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" private ValidCommand currentCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" public Command parse(String[] inp, TaskList taskList) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" String title \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" String startDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" String endDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" int taskIndex \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" boolean isValid \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" if (!isValidCommand(inp[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d ValidCommand.UNKNOWN;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d ValidCommand.valueOf(inp[0].toUpperCase());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" if (currentCommand \u003d\u003d ValidCommand.MARK || currentCommand \u003d\u003d ValidCommand.UNMARK ||","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d\u003d ValidCommand.DELETE) {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" if (inp.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" taskIndex \u003d Integer.parseInt(inp[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d ValidCommand.UNKNOWN;","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" ;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d ValidCommand.UNKNOWN;","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" } else if (currentCommand \u003d\u003d ValidCommand.TODO || currentCommand \u003d\u003d ValidCommand.DEADLINE) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" title \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" endDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" for (; i \u003c inp.length; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" if (inp[i].equals(\"/by\")) break;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" if (i \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" isValid \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" if (title.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" title \u003d inp[i];","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" title +\u003d \" \" + inp[i];","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":" for (int j \u003d i + 1; j \u003c inp.length; j++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":" if (endDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WeeMingQing"},"content":" endDate \u003d inp[j];","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WeeMingQing"},"content":" endDate +\u003d \" \" + inp[j];","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WeeMingQing"},"content":" } else if (currentCommand \u003d\u003d ValidCommand.EVENT) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WeeMingQing"},"content":" int start \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WeeMingQing"},"content":" int end \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WeeMingQing"},"content":" title \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WeeMingQing"},"content":" startDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WeeMingQing"},"content":" endDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WeeMingQing"},"content":" for (; start \u003c inp.length; start++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WeeMingQing"},"content":" if (inp[start].equals(\"/from\")) break;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WeeMingQing"},"content":" if (start \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WeeMingQing"},"content":" isValid \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WeeMingQing"},"content":" if (title.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WeeMingQing"},"content":" title \u003d inp[start];","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WeeMingQing"},"content":" title +\u003d \" \" + inp[start];","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WeeMingQing"},"content":" for (end \u003d start + 1; end \u003c inp.length; end++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WeeMingQing"},"content":" if (inp[end].equals(\"/to\")) break;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WeeMingQing"},"content":" if (startDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WeeMingQing"},"content":" startDate \u003d inp[end];","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WeeMingQing"},"content":" startDate +\u003d \" \" + inp[end];","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WeeMingQing"},"content":" for (int j \u003d end + 1; j \u003c inp.length; j++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WeeMingQing"},"content":" if (endDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WeeMingQing"},"content":" endDate \u003d inp[j];","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WeeMingQing"},"content":" endDate +\u003d \" \" + inp[j];","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WeeMingQing"},"content":" switch (currentCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WeeMingQing"},"content":" case UNKNOWN:","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WeeMingQing"},"content":" if (isValidCommand(inp[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The format of the command is invalid.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"WeeMingQing"},"content":" case BYE:","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"WeeMingQing"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"WeeMingQing"},"content":" case LIST:","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"WeeMingQing"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"WeeMingQing"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"WeeMingQing"},"content":" if (taskIndex \u003e taskList.size() || taskIndex \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The task does not exist.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"WeeMingQing"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"WeeMingQing"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"WeeMingQing"},"content":" if (taskIndex \u003e taskList.size() || taskIndex \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The task does not exist.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"WeeMingQing"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"WeeMingQing"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"WeeMingQing"},"content":" if (taskIndex \u003e taskList.size() || taskIndex \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The task does not exist.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"WeeMingQing"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"WeeMingQing"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"WeeMingQing"},"content":" if (inp.length \u003c 2 || !isValid) {","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The description of a \" + inp[0] + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"WeeMingQing"},"content":" if (inp[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"WeeMingQing"},"content":" return new AddCommand(\"T\", title, \"\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"WeeMingQing"},"content":" if (inp[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"WeeMingQing"},"content":" if (endDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The end date of a \" + inp[0] + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"WeeMingQing"},"content":" return new AddCommand(\"D\", title, \"\", endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"WeeMingQing"},"content":" if (inp[0].equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"WeeMingQing"},"content":" if (startDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The start date of a \" + inp[0] + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"WeeMingQing"},"content":" if (endDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The end date of a \" + inp[0] + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"WeeMingQing"},"content":" return new AddCommand(\"E\", title, startDate, endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"WeeMingQing"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"WeeMingQing"},"content":" public static boolean isValidCommand(String value) {","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"WeeMingQing"},"content":" ValidCommand val \u003d ValidCommand.valueOf(value.toUpperCase());","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"WeeMingQing"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"WeeMingQing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":162}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Deadlines;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Todos;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Events;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" protected String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" public Storage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" String home \u003d System.getProperty(\"user.home\");","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" Path path \u003d Paths.get(home, \"data\", \"duke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" File file \u003d new File(path.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" this.filePath \u003d path.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"Cannot create file!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" public void writeData(String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" FileWriter file \u003d new FileWriter(this.filePath, false);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" file.write(data);","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" file.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" //Throw DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" public TaskList loadData() {","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" TaskList tempList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":" tempList.addTask(parseLine(line));","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":" scanner.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"File is not found!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"WeeMingQing"},"content":" return tempList;","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"WeeMingQing"},"content":" public Task parseLine(String line) {","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"WeeMingQing"},"content":" String[] input \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"WeeMingQing"},"content":" if (input[0].equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"WeeMingQing"},"content":" Todos task \u003d new Todos(input[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"WeeMingQing"},"content":" if (input[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"WeeMingQing"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"WeeMingQing"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"WeeMingQing"},"content":" } else if (input[0].equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"WeeMingQing"},"content":" Deadlines task \u003d new Deadlines(input[2], input[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"WeeMingQing"},"content":" if (input[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"WeeMingQing"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"WeeMingQing"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"WeeMingQing"},"content":" } else if (input[0].equals(\"E\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"WeeMingQing"},"content":" Events task \u003d new Events(input[2], input[3], input[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"WeeMingQing"},"content":" if (input[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"WeeMingQing"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"WeeMingQing"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"WeeMingQing"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WeeMingQing":87}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":" public void greetUser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"Hello! I\u0027m JonBird.\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" public void runProgram() {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" greetUser();","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":10}},{"path":"src/main/java/duke/task/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.DateFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" protected LocalDateTime endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" private static final DateFormatter DF \u003d new DateFormatter();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public Deadlines (String description, String endDate) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" this.endDate \u003d DF.stringToDate(endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" return \"D\";","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" return \"[\" + this.getTypeIcon() + \"]\" + this.getStatusIcon() + this.description + \" (by: \" + DF.dateToString(this.endDate) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":25}},{"path":"src/main/java/duke/task/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.DateFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" protected LocalDateTime startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" private static final DateFormatter DF \u003d new DateFormatter();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" protected LocalDateTime endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public Events (String description, String startDate, String endDate) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" this.startDate \u003d DF.stringToDate(startDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" this.endDate \u003d DF.stringToDate(endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" return \"E\";","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" if (this.startDate.toLocalDate().equals(this.endDate.toLocalDate())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" return \"[\" + this.getTypeIcon() + \"]\" + this.getStatusIcon() + this.description + \" (from: \" + DF.dateTimeToDate(this.startDate) +","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" \" \" + DF.dateTimeToTime(this.startDate) + \" to: \" + DF.dateTimeToTime(this.endDate) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" return \"[\" + this.getTypeIcon() + \"]\" + this.getStatusIcon() + this.description +","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" \" (from: \" + DF.dateToString(this.startDate) + \" to: \" + DF.dateToString(this.endDate) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":33}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"/** Class to represent the task set by user*/","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":" /** Description of the task*/","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" /** Track whether the task is done or not*/","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" /** Cosntructor for the class*/","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" /** Method to mark the task as done*/","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" /** Method to mark the task as undone*/","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" /** Return icon based on whether task is done or undone*/","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" return (this.isDone ? \"[X] \" : \"[ ] \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" /** Method to print the task*/","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" return this.getStatusIcon() + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" return (\"Tk\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":40}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.DateFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" private static final DateFormatter DF \u003d new DateFormatter();","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" public int size() {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" return this.getTaskList().size();","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" return this.taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" this.getTaskList().add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" return this.getTaskList().get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" this.getTaskList().remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" public String convertToFileContent() {","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" String line \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" Task currentTask \u003d this.getTask(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" if (currentTask instanceof Todos) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" String mark \u003d currentTask.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" line \u003d currentTask.getTypeIcon() + \" | \" + mark + \" | \" + currentTask.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" } else if (currentTask instanceof Deadlines) {","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" String mark \u003d currentTask.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" line \u003d currentTask.getTypeIcon() + \" | \" + mark + \" | \" + currentTask.description + \" | \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" DF.saveDateToFile(((Deadlines) currentTask).endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" } else if (currentTask instanceof Events) {","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" String mark \u003d currentTask.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" line \u003d currentTask.getTypeIcon() + \" | \" + mark + \" | \" + currentTask.description + \" | \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" DF.saveDateToFile(((Events) currentTask).startDate) + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" DF.saveDateToFile(((Events) currentTask).endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" result +\u003d line + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WeeMingQing":56}},{"path":"src/main/java/duke/task/Todos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"public class Todos extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" public Todos(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" return \"T\";","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" return \"[\" + this.getTypeIcon() + \"]\" + this.getStatusIcon() + this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":19}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Todos;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" public void parseListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" Todos task1 \u003d new Todos(\"read a book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" Deadlines task2 \u003d new Deadlines(\"walk\", \"2002-12-01 12:12\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" taskList.addTask(task2);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" Events task3 \u003d new Events(\"run 2.4km\", \"2022-12-12 12:00\", \"2022-12-12 14:00\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" taskList.addTask(task3);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" AddCommand comm \u003d (AddCommand) parser.parse(new String[] {\"todo\", \"walk to school\"}, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" comm.execute(taskList, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" assertEquals(taskList.getTask(taskList.size() - 1).printTask(), \"[T][ ] walk to school\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"Please check your test cases.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":37}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Todos;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public void todoToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" Todos task \u003d new Todos(\"read a book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" assertEquals(task.printTask(), \"[T][ ] read a book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" public void deadlineToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" Deadlines task \u003d new Deadlines(\"walk\", \"2002-12-01 12:12\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" assertEquals(task.printTask(), \"[D][ ] walk (by: Dec 01 2002 12:12)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" public void eventToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" Events task \u003d new Events(\"run 2.4km\", \"2022-12-12 12:00\", \"2022-12-12 14:00\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" assertEquals(task.printTask(), \"[E][ ] run 2.4km (from: Dec 12 2022 12:00 to: 14:00)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":28}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"event","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"deadline return book /by tomorrow","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"event project /from Mon morning /to Fri Night","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"list","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":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":"WeeMingQing"},"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":{"WeeMingQing":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"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":"WeeMingQing"},"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":{"WeeMingQing":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":"WeeMingQing"},"content":" mainClass.set(\"duke.main.Duke\")","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" archiveBaseName \u003d \"duke\"","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WeeMingQing":1,"-":41}},{"path":"src/main/java/duke/command/AddCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Todos;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" * A class for the command for adding new task to list based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" * The type of task being added; todo, deadline or event.","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" private String commandType;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" * The description of task being added.","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" * The starting date for the task being added.","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" private String startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" * The ending date for the task being added.","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" private String endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for AddCommand","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" * @param commandType The type of task being added; todo, deadline or event","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" * @param description The description of task being added","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" * @param startDate The starting date for the task being added","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" * @param endDate The ending date for the task being added","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" public AddCommand(String commandType, String description, String startDate, String endDate) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" this.startDate \u003d startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" this.endDate \u003d endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":" Task temp \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":" switch(commandType) {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":" case \"T\":","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":" temp \u003d new Todos(this.description);","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WeeMingQing"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WeeMingQing"},"content":" case \"D\":","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WeeMingQing"},"content":" temp \u003d new Deadlines(this.description, this.endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WeeMingQing"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WeeMingQing"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\t\" + \"Please ensure that your date is in \\\"yyyy-MM-dd HH:mm\\\"\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WeeMingQing"},"content":" \" format. Put 00:00 if time does not matter.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WeeMingQing"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WeeMingQing"},"content":" case \"E\":","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WeeMingQing"},"content":" temp \u003d new Events(this.description, this.startDate, this.endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WeeMingQing"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WeeMingQing"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\t\" + \"Please ensure that your date is in \\\"yyyy-MM-dd HH:mm\\\"\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WeeMingQing"},"content":" \" format. Put 00:00 if time does not matter.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WeeMingQing"},"content":" return;","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WeeMingQing"},"content":" taskList.addTask(temp);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WeeMingQing"},"content":" storage.writeData(taskList.convertToFileContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\tGot it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\" + taskList.getTask(taskList.size() - 1).printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\tNow you have \" + taskList.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":94}},{"path":"src/main/java/duke/command/ByeCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" * A class for the command for terminating the Duke bot.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\tBye. Hope to see you again soon!\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":24}},{"path":"src/main/java/duke/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" * An abstract class for command based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"public abstract class Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" * Runs the actions of the command based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" * @param taskList The list of tasks under the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" * @param storage The storage responsible for saving and load the taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" * into a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" public abstract void execute(TaskList taskList, Storage storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" * Prints the actions taken by the command based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" * @param taskList The list of tasks under the user.","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" public abstract void printCommand(TaskList taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" * Returns true or false based on whether the command will cause the program","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" * to terminate and stop accepting user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" public abstract boolean isContinue();","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":30}},{"path":"src/main/java/duke/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" * A class for the command for deleting task from list based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" * The index of the task in the taskList to be deleted.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for DeleteCommand","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" * @param index The index of the task in the taskList to be deleted","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" taskList.removeTask(this.index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" storage.writeData(taskList.convertToFileContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" Task temp \u003d taskList.getTask(this.index - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\tNoted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\" + temp.printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\tNow you have \" + (taskList.size() - 1) + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":44}},{"path":"src/main/java/duke/command/FindCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" * A class for the command for finding tasks in list using keywords","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" /** Keywords to search for in the task description*/","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" private String keywords;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for FindCommand","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" * @param keywords Keywords to search for in the task description","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" public FindCommand(String keywords) {","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" this.keywords \u003d keywords.toLowerCase().trim();","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" TaskList tempList \u003d new TaskList();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" for (Task task : taskList.getTaskList()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" String description \u003d task.getDescription().toLowerCase();","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" if (description.contains(this.keywords)) {","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" tempList.addTask(task);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(tempList);","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList filteredTaskList) {","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" for (int i \u003d 0; i \u003c filteredTaskList.size(); i++) {","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\"+ (i+1) + \". \" + filteredTaskList.getTask(i).printTask());","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"WeeMingQing":47}},{"path":"src/main/java/duke/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" * A class for the command for listing all the tasks in the list.","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\tHere are the tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" for (int i \u003d 0; i \u003c taskList.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\"+ (i+1) + \". \" + taskList.getTask(i).printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":28}},{"path":"src/main/java/duke/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" * A class for the command for marking a task in list as done","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" * based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" * The index of the task in the taskList to be marked.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for MarkCommand","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" * @param index The index of the task in the taskList to be marked","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" taskList.getTask(this.index - 1).markAsDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" storage.writeData(taskList.convertToFileContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\tNice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\" + taskList.getTask(this.index - 1).printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":42}},{"path":"src/main/java/duke/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" * A class for the command for marking a task in list as undone","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" * based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" * The index of the task in the taskList to be unmarked.","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for UnmarkCommand","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" * @param index The index of the task in the taskList to be unmarked","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" public void execute(TaskList taskList, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" taskList.getTask(this.index - 1).markAsUndone();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" this.printCommand(taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" storage.writeData(taskList.convertToFileContent());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" public void printCommand(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\tOK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"\\t\\t\" + taskList.getTask(this.index - 1).printTask());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" public boolean isContinue() {","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":42}},{"path":"src/main/java/duke/exception/DukeException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"/** This class handles exceptions from Duke bot.*/","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for DukeException","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" * @param errorMsg The error message for the Duke exception","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" public DukeException(String errorMsg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" public String toString() {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" return \"☹ OOPS!!! \" + super.getMessage();","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":17}},{"path":"src/main/java/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"/** This class handles exceptions for invalid commands from Duke bot*/","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"public class InvalidCommandException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for InvalidCommandException","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" * @param errorMsg The error message for the InvalidCommandException","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" public InvalidCommandException(String errorMsg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":13}},{"path":"src/main/java/duke/exception/InvalidSyntaxException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.exception;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"/** This class handles exceptions for invalid syntax for commands from Duke bot.*/","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"public class InvalidSyntaxException extends DukeException {","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for InvalidSyntaxException","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" * @param errorMsg The error message for the InvalidSyntaxException","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public InvalidSyntaxException(String errorMsg) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" super(errorMsg);","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":14}},{"path":"src/main/java/duke/main/DateFormatter.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" * A class for formatting between LocalDateTime object and String based on","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" * user input","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":"public class DateFormatter {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" * Returns LocalDateTime object from String","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" * @param date The String containing date from user input","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" * @return LocalDateTime","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" * @throws DateTimeException if the format of String is wrong","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" public LocalDateTime stringToDate(String date) throws DateTimeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" String dateFormat \u003d \"yyyy-MM-dd HH:mm\";","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(dateFormat);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" LocalDateTime dateTime \u003d LocalDateTime.parse(date, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" return dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" * Returns dateTime in a certain format","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" * @param dateTime The LocalDateTime containing dateTime from user input","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" * @return dateTime in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" public String dateToString(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d dateTime.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" * Returns dateTime in a certain format to save in a file","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" * @param dateTime The LocalDateTime containing dateTime from user input","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" * @return dateTime in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" public String saveDateToFile(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"yyyy-MM-dd HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d dateTime.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" * Returns only date in a certain format from LocalDateTime object","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" * @param dateTime The LocalDateTime containing dateTime from user input","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":" * @return only date in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":" public String dateTimeToDate(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":" LocalDate date \u003d dateTime.toLocalDate();","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d date.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"WeeMingQing"},"content":" * Returns only time in a certain format from LocalDateTime object","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"WeeMingQing"},"content":" * @param dateTime The LocalDateTime containing dateTime from user input","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"WeeMingQing"},"content":" * @return only time in String format","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"WeeMingQing"},"content":" public String dateTimeToTime(LocalDateTime dateTime) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WeeMingQing"},"content":" LocalTime time \u003d dateTime.toLocalTime();","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WeeMingQing"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d time.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":74}},{"path":"src/main/java/duke/main/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" * A class for the Duke bot.","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" * The ui for Duke bot","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" private static Ui ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" * The main function for running Duke bot","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" * @param args The string array for input","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" boolean listen \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" /** Captures user input*/","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" Scanner jonBird \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" /** Stores user input*/","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" TaskList inputList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" /** User input*/","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" String input \u003d \"\";","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" inputList \u003d storage.loadData();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" ui.runProgram();","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" while (listen) {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" input \u003d jonBird.nextLine().trim();","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" String[] inp \u003d input.split(\"\\\\s+\");","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" Command currentCommand \u003d parser.parse(inp, inputList);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" currentCommand.execute(inputList, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" listen \u003d currentCommand.isContinue();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\t\" + e.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" } catch (DateTimeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"JonBird:\\n\\t\" + \"Please ensure that your date is in \\\"yyyy-MM-dd HH:mm\\\"\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" \" format. Put 00:00 if time does not matter.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":" jonBird.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":57,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":58,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":56,"-":2}},{"path":"src/main/java/duke/main/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.command.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.InvalidSyntaxException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" * A class handling commands from user input","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" * A list of valid commands","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" public enum ValidCommand {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" BYE, LIST, TODO, DEADLINE, EVENT, MARK, UNMARK, DELETE, UNKNOWN, FIND","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" * The current command from user input","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" private ValidCommand currentCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" * Returns Command object based on user input.","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" * @param inp The String array containing the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" * @param taskList The list of tasks under the user","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" * @return Command","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" * @throws DukeException if the format of Command is wrong","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" public Command parse(String[] inp, TaskList taskList) throws DukeException {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" String title \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" String startDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" String endDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" int taskIndex \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" boolean isValid \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" if (!isValidCommand(inp[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d ValidCommand.UNKNOWN;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d ValidCommand.valueOf(inp[0].toUpperCase());","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" if (currentCommand \u003d\u003d ValidCommand.MARK || currentCommand \u003d\u003d ValidCommand.UNMARK ||","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d\u003d ValidCommand.DELETE) {","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" if (inp.length \u003d\u003d 2) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" taskIndex \u003d Integer.parseInt(inp[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d ValidCommand.UNKNOWN;","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":" ;","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d ValidCommand.UNKNOWN;","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WeeMingQing"},"content":" } else if (currentCommand \u003d\u003d ValidCommand.TODO || currentCommand \u003d\u003d ValidCommand.DEADLINE ||","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WeeMingQing"},"content":" currentCommand \u003d\u003d ValidCommand.FIND) {","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"WeeMingQing"},"content":" int i \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WeeMingQing"},"content":" title \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WeeMingQing"},"content":" endDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WeeMingQing"},"content":" for (; i \u003c inp.length; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WeeMingQing"},"content":" if (inp[i].equals(\"/by\")) break;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WeeMingQing"},"content":" if (i \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WeeMingQing"},"content":" isValid \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WeeMingQing"},"content":" if (title.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WeeMingQing"},"content":" title \u003d inp[i];","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WeeMingQing"},"content":" title +\u003d \" \" + inp[i];","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WeeMingQing"},"content":" for (int j \u003d i + 1; j \u003c inp.length; j++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WeeMingQing"},"content":" if (endDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WeeMingQing"},"content":" endDate \u003d inp[j];","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WeeMingQing"},"content":" endDate +\u003d \" \" + inp[j];","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WeeMingQing"},"content":" } else if (currentCommand \u003d\u003d ValidCommand.EVENT) {","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WeeMingQing"},"content":" int start \u003d 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WeeMingQing"},"content":" int end \u003d 0;","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WeeMingQing"},"content":" title \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WeeMingQing"},"content":" startDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WeeMingQing"},"content":" endDate \u003d \"\";","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WeeMingQing"},"content":" for (; start \u003c inp.length; start++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WeeMingQing"},"content":" if (inp[start].equals(\"/from\")) break;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"WeeMingQing"},"content":" if (start \u003d\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WeeMingQing"},"content":" isValid \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WeeMingQing"},"content":" if (title.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WeeMingQing"},"content":" title \u003d inp[start];","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WeeMingQing"},"content":" title +\u003d \" \" + inp[start];","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WeeMingQing"},"content":" for (end \u003d start + 1; end \u003c inp.length; end++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WeeMingQing"},"content":" if (inp[end].equals(\"/to\")) break;","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WeeMingQing"},"content":" if (startDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WeeMingQing"},"content":" startDate \u003d inp[end];","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WeeMingQing"},"content":" startDate +\u003d \" \" + inp[end];","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"WeeMingQing"},"content":" for (int j \u003d end + 1; j \u003c inp.length; j++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"WeeMingQing"},"content":" if (endDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"WeeMingQing"},"content":" endDate \u003d inp[j];","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"WeeMingQing"},"content":" endDate +\u003d \" \" + inp[j];","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"WeeMingQing"},"content":" switch (currentCommand) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"WeeMingQing"},"content":" case UNKNOWN:","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"WeeMingQing"},"content":" if (isValidCommand(inp[0])) {","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The format of the command is invalid.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"WeeMingQing"},"content":" case BYE:","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"WeeMingQing"},"content":" return new ByeCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"WeeMingQing"},"content":" case LIST:","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"WeeMingQing"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"WeeMingQing"},"content":" case FIND:","lastModifiedDate":"2023-09-03"},{"lineNumber":129,"author":{"gitId":"WeeMingQing"},"content":" return new FindCommand(title);","lastModifiedDate":"2023-09-03"},{"lineNumber":130,"author":{"gitId":"WeeMingQing"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"WeeMingQing"},"content":" if (taskIndex \u003e taskList.size() || taskIndex \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The task does not exist.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"WeeMingQing"},"content":" return new UnmarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"WeeMingQing"},"content":" case MARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"WeeMingQing"},"content":" if (taskIndex \u003e taskList.size() || taskIndex \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The task does not exist.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"WeeMingQing"},"content":" return new MarkCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"WeeMingQing"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"WeeMingQing"},"content":" if (taskIndex \u003e taskList.size() || taskIndex \u003c 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The task does not exist.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"WeeMingQing"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"WeeMingQing"},"content":" return new DeleteCommand(taskIndex);","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"WeeMingQing"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"WeeMingQing"},"content":" if (inp.length \u003c 2 || !isValid) {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The description of a \" + inp[0] + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"WeeMingQing"},"content":" if (inp[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"WeeMingQing"},"content":" return new AddCommand(\"T\", title, \"\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"WeeMingQing"},"content":" if (inp[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"WeeMingQing"},"content":" if (endDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The end date of a \" + inp[0] + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"WeeMingQing"},"content":" return new AddCommand(\"D\", title, \"\", endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"WeeMingQing"},"content":" if (inp[0].equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"WeeMingQing"},"content":" if (startDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The start date of a \" + inp[0] + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"WeeMingQing"},"content":" if (endDate.equals(\"\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"WeeMingQing"},"content":" throw new InvalidSyntaxException(\"The end date of a \" + inp[0] + \" cannot be empty.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"WeeMingQing"},"content":" return new AddCommand(\"E\", title, startDate, endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"WeeMingQing"},"content":" return null;","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":175,"author":{"gitId":"WeeMingQing"},"content":" * Returns true if user input is valid command, false otherwise","lastModifiedDate":"2023-09-03"},{"lineNumber":176,"author":{"gitId":"WeeMingQing"},"content":" * @param value The String containing command from user input","lastModifiedDate":"2023-09-03"},{"lineNumber":177,"author":{"gitId":"WeeMingQing"},"content":" * @return true or false","lastModifiedDate":"2023-09-03"},{"lineNumber":178,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":179,"author":{"gitId":"WeeMingQing"},"content":" public static boolean isValidCommand(String value) {","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"WeeMingQing"},"content":" ValidCommand val \u003d ValidCommand.valueOf(value.toUpperCase());","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"WeeMingQing"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"WeeMingQing"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"WeeMingQing"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":187}},{"path":"src/main/java/duke/main/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.io.File;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import java.time.DateTimeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Deadlines;","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Todos;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Events;","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" * A class handling the saving and load the taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" * into a file.","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" * The path of the file where the taskList is saved","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" protected String filePath;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for the Storage","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" public Storage() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" String home \u003d System.getProperty(\"user.home\");","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" Path path \u003d Paths.get(home, \"data\", \"duke.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" File file \u003d new File(path.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" this.filePath \u003d path.toString();","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"Cannot create file!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" * Writes the data into the file.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" * @param data The content to be written into the file","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" public void writeData(String data) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":" FileWriter file \u003d new FileWriter(this.filePath, false);","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":" file.write(data);","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":" file.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"WeeMingQing"},"content":" //Throw DukeException","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"WeeMingQing"},"content":" * Reads the content of the file","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"WeeMingQing"},"content":" * @return TaskList","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"WeeMingQing"},"content":" public TaskList loadData() {","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"WeeMingQing"},"content":" TaskList tempList \u003d new TaskList();","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"WeeMingQing"},"content":" File file \u003d new File(this.filePath);","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"WeeMingQing"},"content":" Scanner scanner \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"WeeMingQing"},"content":" while (scanner.hasNextLine()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"WeeMingQing"},"content":" String line \u003d scanner.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"WeeMingQing"},"content":" tempList.addTask(parseLine(line));","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"WeeMingQing"},"content":" scanner.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"WeeMingQing"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"File is not found!\");","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"WeeMingQing"},"content":" return tempList;","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":84,"author":{"gitId":"WeeMingQing"},"content":" * Reads the line and convert them into Task objects","lastModifiedDate":"2023-09-03"},{"lineNumber":85,"author":{"gitId":"WeeMingQing"},"content":" * @param line The line read from the file","lastModifiedDate":"2023-09-03"},{"lineNumber":86,"author":{"gitId":"WeeMingQing"},"content":" * @return Task","lastModifiedDate":"2023-09-03"},{"lineNumber":87,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":88,"author":{"gitId":"WeeMingQing"},"content":" public Task parseLine(String line) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"WeeMingQing"},"content":" String[] input \u003d line.split(\" \\\\| \");","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"WeeMingQing"},"content":" if (input[0].equals(\"T\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"WeeMingQing"},"content":" Todos task \u003d new Todos(input[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"WeeMingQing"},"content":" if (input[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"WeeMingQing"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"WeeMingQing"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"WeeMingQing"},"content":" } else if (input[0].equals(\"D\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"WeeMingQing"},"content":" Deadlines task \u003d new Deadlines(input[2], input[3]);","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"WeeMingQing"},"content":" if (input[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"WeeMingQing"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":100,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":101,"author":{"gitId":"WeeMingQing"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":102,"author":{"gitId":"WeeMingQing"},"content":" } else if (input[0].equals(\"E\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":103,"author":{"gitId":"WeeMingQing"},"content":" Events task \u003d new Events(input[2], input[3], input[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":104,"author":{"gitId":"WeeMingQing"},"content":" if (input[1].equals(\"1\")) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"WeeMingQing"},"content":" task.markAsDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"WeeMingQing"},"content":" return task;","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"WeeMingQing"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":112,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WeeMingQing":112}},{"path":"src/main/java/duke/main/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":" * A class handling the ui of the Duke bot","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" * Greets the user when the bot starts.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public void greetUser() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"Hello! I\u0027m JonBird.\\nWhat can I do for you?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" * Runs the program for ui","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" public void runProgram() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" greetUser();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":21}},{"path":"src/main/java/duke/task/Deadlines.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.DateFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" * A Task with deadline.","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"public class Deadlines extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" * The deadline of a task","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" protected LocalDateTime endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" * A formatter for the date","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" private static final DateFormatter DF \u003d new DateFormatter();","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for Deadlines","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" * @param description The description of the task with deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" * @param endDate The deadline of a task","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" public Deadlines (String description, String endDate) {","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" this.endDate \u003d DF.stringToDate(endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" return \"D\";","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" return \"[\" + this.getTypeIcon() + \"]\" + this.getStatusIcon() + this.description + \" (by: \" + DF.dateToString(this.endDate) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":43}},{"path":"src/main/java/duke/task/Events.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.DateFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"/**","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" * A Task with starting date and deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"public class Events extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" * The starting date of a task","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" protected LocalDateTime startDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" * A formatter for the date","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" private static final DateFormatter DF \u003d new DateFormatter();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" * The deadline of a task","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" protected LocalDateTime endDate;","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for Deadlines","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" * @param description The description of the task with starting date and deadline","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" * @param startDate The starting date of a task","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" * @param endDate The deadline of a task","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" public Events (String description, String startDate, String endDate) {","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" this.startDate \u003d DF.stringToDate(startDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" this.endDate \u003d DF.stringToDate(endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" return \"E\";","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":" if (this.startDate.toLocalDate().equals(this.endDate.toLocalDate())) {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" return \"[\" + this.getTypeIcon() + \"]\" + this.getStatusIcon() + this.description + \" (from: \" + DF.dateTimeToDate(this.startDate) +","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" \" \" + DF.dateTimeToTime(this.startDate) + \" to: \" + DF.dateTimeToTime(this.endDate) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" return \"[\" + this.getTypeIcon() + \"]\" + this.getStatusIcon() + this.description +","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" \" (from: \" + DF.dateToString(this.startDate) + \" to: \" + DF.dateToString(this.endDate) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":54}},{"path":"src/main/java/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"/** Class to represent the task set by user*/","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"public abstract class Task {","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":" /** Description of the task*/","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":" /** Track whether the task is done or not*/","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" * Constructor for the Task","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" * @param description The description of the task based on the user input","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" /** Method to mark the task as done*/","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" public void markAsDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" /** Method to mark the task as undone*/","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" public void markAsUndone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" /** Return icon based on whether task is done or undone*/","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" return (this.isDone ? \"[X] \" : \"[ ] \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" /** Method to print the task*/","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" public abstract String printTask();","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":" /** Method to get the typeIcon the task*/","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" public abstract String getTypeIcon();","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" /** Method to get the description of the task*/","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" return this.description;","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":45}},{"path":"src/main/java/duke/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.DateFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"/** Class to represent the taskList of the user*/","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"public class TaskList {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" /** The list to store the tasks*/","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" private ArrayList\u003cTask\u003e taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" * A formatter for the date","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" private static final DateFormatter DF \u003d new DateFormatter();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" * A constructor for the TaskList","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" public TaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" taskList \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" * Returns size of taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" public int size() {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" return this.getTaskList().size();","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" * Returns taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" public ArrayList\u003cTask\u003e getTaskList() {","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" return this.taskList;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"WeeMingQing"},"content":" * Adds task to taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"WeeMingQing"},"content":" * @param task The task to be added","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"WeeMingQing"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"WeeMingQing"},"content":" this.getTaskList().add(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"WeeMingQing"},"content":" * Returns task from taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"WeeMingQing"},"content":" * @param index The index of the task inside the taskList to be returned","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"WeeMingQing"},"content":" * @return task","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"WeeMingQing"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"WeeMingQing"},"content":" return this.getTaskList().get(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"WeeMingQing"},"content":" * Removes task from taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"WeeMingQing"},"content":" * @param index The index of the task inside the taskList to be removed","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"WeeMingQing"},"content":" public void removeTask(int index) {","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"WeeMingQing"},"content":" this.getTaskList().remove(index);","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"WeeMingQing"},"content":" * Returns taskList in String format to be written to file","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"WeeMingQing"},"content":" * @return content of taskList","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"WeeMingQing"},"content":" public String convertToFileContent() {","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"WeeMingQing"},"content":" String result \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"WeeMingQing"},"content":" String line \u003d \"\";","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"WeeMingQing"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"WeeMingQing"},"content":" Task currentTask \u003d this.getTask(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"WeeMingQing"},"content":" if (currentTask instanceof Todos) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"WeeMingQing"},"content":" String mark \u003d currentTask.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"WeeMingQing"},"content":" line \u003d currentTask.getTypeIcon() + \" | \" + mark + \" | \" + currentTask.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"WeeMingQing"},"content":" } else if (currentTask instanceof Deadlines) {","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"WeeMingQing"},"content":" String mark \u003d currentTask.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"WeeMingQing"},"content":" line \u003d currentTask.getTypeIcon() + \" | \" + mark + \" | \" + currentTask.description + \" | \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"WeeMingQing"},"content":" DF.saveDateToFile(((Deadlines) currentTask).endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WeeMingQing"},"content":" } else if (currentTask instanceof Events) {","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"WeeMingQing"},"content":" String mark \u003d currentTask.isDone ? \"1\" : \"0\";","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"WeeMingQing"},"content":" line \u003d currentTask.getTypeIcon() + \" | \" + mark + \" | \" + currentTask.description + \" | \" +","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"WeeMingQing"},"content":" DF.saveDateToFile(((Events) currentTask).startDate) + \" | \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WeeMingQing"},"content":" DF.saveDateToFile(((Events) currentTask).endDate);","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"WeeMingQing"},"content":" result +\u003d line + \"\\n\";","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"WeeMingQing"},"content":" return result;","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"WeeMingQing":90}},{"path":"src/main/java/duke/task/Todos.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Task;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"/** Class to represent the task set by user*/","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"public class Todos extends Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":" /**","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":" * The constructor for Deadlines","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" * @param description The description of the task","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" */","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" public Todos(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" super(description);","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" public String getTypeIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" return \"T\";","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" @Override","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" public String printTask() {","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" return \"[\" + this.getTypeIcon() + \"]\" + this.getStatusIcon() + this.description;","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":25}},{"path":"src/test/java/duke/ParserTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.main;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import duke.command.AddCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import duke.exception.DukeException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import duke.main.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Todos;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"public class ParserTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" public void parseListCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" Storage storage \u003d new Storage();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" Todos task1 \u003d new Todos(\"read a book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":" taskList.addTask(task1);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" Deadlines task2 \u003d new Deadlines(\"walk\", \"2002-12-01 12:12\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" taskList.addTask(task2);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" Events task3 \u003d new Events(\"run 2.4km\", \"2022-12-12 12:00\", \"2022-12-12 14:00\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" taskList.addTask(task3);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WeeMingQing"},"content":" AddCommand comm \u003d (AddCommand) parser.parse(new String[] {\"todo\", \"walk to school\"}, taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WeeMingQing"},"content":" comm.execute(taskList, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WeeMingQing"},"content":" assertEquals(taskList.getTask(taskList.size() - 1).printTask(), \"[T][ ] walk to school\");","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WeeMingQing"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WeeMingQing"},"content":" System.out.println(\"Please check your test cases.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WeeMingQing"},"content":" storage.writeData(\"\");","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":37}},{"path":"src/test/java/duke/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"package duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Todos;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Deadlines;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"import duke.task.Events;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":" public void todoToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WeeMingQing"},"content":" Todos task \u003d new Todos(\"read a book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WeeMingQing"},"content":" assertEquals(task.printTask(), \"[T][ ] read a book\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WeeMingQing"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WeeMingQing"},"content":" public void deadlineToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WeeMingQing"},"content":" Deadlines task \u003d new Deadlines(\"walk\", \"2002-12-01 12:12\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WeeMingQing"},"content":" assertEquals(task.printTask(), \"[D][ ] walk (by: Dec 01 2002 12:12)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WeeMingQing"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WeeMingQing"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WeeMingQing"},"content":" public void eventToString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WeeMingQing"},"content":" Events task \u003d new Events(\"run 2.4km\", \"2022-12-12 12:00\", \"2022-12-12 14:00\");","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WeeMingQing"},"content":" assertEquals(task.printTask(), \"[E][ ] run 2.4km (from: Dec 12 2022 12:00 to: 14:00)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WeeMingQing"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WeeMingQing"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WeeMingQing":28}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WeeMingQing"},"content":"blah","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"WeeMingQing"},"content":"todo","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"WeeMingQing"},"content":"event","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"WeeMingQing"},"content":"deadline","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"WeeMingQing"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"WeeMingQing"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"WeeMingQing"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"WeeMingQing"},"content":"list","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"WeeMingQing"},"content":"deadline return book /by tomorrow","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"WeeMingQing"},"content":"event project /from Mon morning /to Fri Night","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"WeeMingQing"},"content":"list","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"WeeMingQing":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":"WeeMingQing"},"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":{"WeeMingQing":1,"-":20}}] diff --git a/WeeMingQing_ip_master/commits.json b/WeeMingQing_ip_master/commits.json index 6128bd82..8d0f1f35 100644 --- a/WeeMingQing_ip_master/commits.json +++ b/WeeMingQing_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"WeeMingQing":[{"date":"2023-08-23","commitResults":[{"hash":"1d2028dc31060418ea90c0b67820d799a68c49d8","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"97013d9e2d011c8936ee56a91c839d9271a32b34","isMergeCommit":false,"messageTitle":"Add echo.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"30e7352946cca75b43da776e1ddcdb5d8166dd3c","isMergeCommit":false,"messageTitle":"Add list.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"60cbb228698c137deadace9f17c67bc15e6fab1c","isMergeCommit":false,"messageTitle":"Add Task class.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":12}}},{"hash":"fac8a194e8d41d61204f1964484ff72e63cf49bd","isMergeCommit":false,"messageTitle":"Add inheritance classes.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":5}}},{"hash":"20c5825bd28b871c409e82772317b6cd55717cdb","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"e0ad6cbbe0c0b1f79d6be637113d0cb898129b7f","isMergeCommit":false,"messageTitle":"Add TextUiTesting.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":4,"deletions":3}}},{"hash":"dc2ff7dce9830a588b436a1ee70e738da3201f03","isMergeCommit":false,"messageTitle":"Add exceptions.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":72,"deletions":7}}},{"hash":"aacf09258424910797403e1d0527d8c94c6bdcc3","isMergeCommit":false,"messageTitle":"Add delete.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":18}}},{"hash":"78c6d701e747241847e987edecb15498957833c5","isMergeCommit":false,"messageTitle":"Add enum.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":72}}},{"hash":"783f8157036e6112a55b24f17fdd41ba4c517e65","isMergeCommit":false,"messageTitle":"Add exception.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":7}}},{"hash":"07c6faad563356d16bb95490f9be1a67a9379f3a","isMergeCommit":false,"messageTitle":"Add out-of-range exception.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"3ff3b87e11a84d7fbccd10a70bc9a83e3a702a94","isMergeCommit":false,"messageTitle":"Add Storage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":207,"deletions":31},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"ddc31fe61597bc09162f9f4ee6dacc4166c64c30","isMergeCommit":false,"messageTitle":"Revert \"Add Storage\"","messageBody":"This reverts commit 3ff3b87e11a84d7fbccd10a70bc9a83e3a702a94.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":31,"deletions":207},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fec80ff76832aa1f53ced5daa1dadbe678270c83","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"* master:\n Revert \"Add Storage\"\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"2780547f8a438b204a87a2bc62ee2cea99a2ee99","isMergeCommit":false,"messageTitle":"Add Storage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":207,"deletions":31},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3f5748d05b2fb3357243925a4a65f4961171115d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Add Storage\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"763707b0bf5a1ab7bd383163ae5083ffe7fee47a","isMergeCommit":false,"messageTitle":"Add dateTime object","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":27}}},{"hash":"367df23992e09af4bc1ff305757e883dcd6616cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Add dateTime object\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"001d0834353cd4d04766ad3ba79c81fe0ab21bae","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":411,"deletions":207}}},{"hash":"57e715761b822f1c1a0d70669877a727ecfaad0e","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"* A-MoreOOP:\n Add more OOP\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"ea0cf6d83a085d0665d9b5f18c2fb2a3d33d3c68","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":27},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"11c0d22d3a9a90015bfc4665c9587453b096178e","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"* A-Packages:\n Refactor code\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"9b851b21e395c6ad669d625ea1ae6d94a8310d6e","isMergeCommit":false,"messageTitle":"Add gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"5fb4de1843a04baae6b075a5258572f758e29096","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"* A-Gradle:\n Add gradle\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"797f800c8f3fbf35caa23d4b8e4201b004559198","isMergeCommit":false,"messageTitle":"Add JUnit test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":0}}},{"hash":"02fc9227dcecb11c02610718a7379ce0a8c0f36f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"* A-JUnit:\n Add JUnit test\n","tags":["A-JUnit"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"WeeMingQing":{"java":831,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":11}},"authorContributionVariance":{"WeeMingQing":83944.81},"authorDisplayNameMap":{"WeeMingQing":"CS2103T-W12-2 WEE ..QING"}} +{"authorDailyContributionsMap":{"WeeMingQing":[{"date":"2023-08-23","commitResults":[{"hash":"1d2028dc31060418ea90c0b67820d799a68c49d8","isMergeCommit":false,"messageTitle":"Rename, Greet, Exit.","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}},{"hash":"97013d9e2d011c8936ee56a91c839d9271a32b34","isMergeCommit":false,"messageTitle":"Add echo.","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":9,"deletions":5}}},{"hash":"30e7352946cca75b43da776e1ddcdb5d8166dd3c","isMergeCommit":false,"messageTitle":"Add list.","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":18,"deletions":1}}},{"hash":"60cbb228698c137deadace9f17c67bc15e6fab1c","isMergeCommit":false,"messageTitle":"Add Task class.","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":82,"deletions":12}}},{"hash":"fac8a194e8d41d61204f1964484ff72e63cf49bd","isMergeCommit":false,"messageTitle":"Add inheritance classes.","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":124,"deletions":5}}},{"hash":"20c5825bd28b871c409e82772317b6cd55717cdb","isMergeCommit":true,"messageTitle":"Merge commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027","messageBody":"* commit \u0027ed6d4d25bd4e34461919ffe785a6f10f4c087552\u0027:\n Bump gradle and lib version\n Add Gradle support\n","fileTypesAndContributionMap":{}},{"hash":"e0ad6cbbe0c0b1f79d6be637113d0cb898129b7f","isMergeCommit":false,"messageTitle":"Add TextUiTesting.","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":7,"deletions":0},"java":{"insertions":4,"deletions":3}}},{"hash":"dc2ff7dce9830a588b436a1ee70e738da3201f03","isMergeCommit":false,"messageTitle":"Add exceptions.","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":72,"deletions":7}}},{"hash":"aacf09258424910797403e1d0527d8c94c6bdcc3","isMergeCommit":false,"messageTitle":"Add delete.","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":34,"deletions":18}}},{"hash":"78c6d701e747241847e987edecb15498957833c5","isMergeCommit":false,"messageTitle":"Add enum.","messageBody":"","tags":["A-Enums"],"fileTypesAndContributionMap":{"java":{"insertions":78,"deletions":72}}},{"hash":"783f8157036e6112a55b24f17fdd41ba4c517e65","isMergeCommit":false,"messageTitle":"Add exception.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":22,"deletions":7}}},{"hash":"07c6faad563356d16bb95490f9be1a67a9379f3a","isMergeCommit":false,"messageTitle":"Add out-of-range exception.","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-09-01","commitResults":[{"hash":"3ff3b87e11a84d7fbccd10a70bc9a83e3a702a94","isMergeCommit":false,"messageTitle":"Add Storage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":207,"deletions":31},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"ddc31fe61597bc09162f9f4ee6dacc4166c64c30","isMergeCommit":false,"messageTitle":"Revert \"Add Storage\"","messageBody":"This reverts commit 3ff3b87e11a84d7fbccd10a70bc9a83e3a702a94.\n","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":31,"deletions":207},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"fec80ff76832aa1f53ced5daa1dadbe678270c83","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Level-7","messageBody":"* master:\n Revert \"Add Storage\"\n","tags":["Level-7"],"fileTypesAndContributionMap":{}},{"hash":"2780547f8a438b204a87a2bc62ee2cea99a2ee99","isMergeCommit":false,"messageTitle":"Add Storage","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":207,"deletions":31},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"3f5748d05b2fb3357243925a4a65f4961171115d","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"* branch-Level-7:\n Add Storage\n","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"763707b0bf5a1ab7bd383163ae5083ffe7fee47a","isMergeCommit":false,"messageTitle":"Add dateTime object","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":102,"deletions":27}}},{"hash":"367df23992e09af4bc1ff305757e883dcd6616cf","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"* branch-Level-8:\n Add dateTime object\n","tags":["Level-8"],"fileTypesAndContributionMap":{}},{"hash":"001d0834353cd4d04766ad3ba79c81fe0ab21bae","isMergeCommit":false,"messageTitle":"Add more OOP","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":411,"deletions":207}}},{"hash":"57e715761b822f1c1a0d70669877a727ecfaad0e","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-MoreOOP\u0027","messageBody":"* A-MoreOOP:\n Add more OOP\n","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{}},{"hash":"ea0cf6d83a085d0665d9b5f18c2fb2a3d33d3c68","isMergeCommit":false,"messageTitle":"Refactor code","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":16,"deletions":27},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"11c0d22d3a9a90015bfc4665c9587453b096178e","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Packages\u0027","messageBody":"* A-Packages:\n Refactor code\n","tags":["A-Packages"],"fileTypesAndContributionMap":{}},{"hash":"9b851b21e395c6ad669d625ea1ae6d94a8310d6e","isMergeCommit":false,"messageTitle":"Add gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"5fb4de1843a04baae6b075a5258572f758e29096","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-Gradle\u0027","messageBody":"* A-Gradle:\n Add gradle\n","tags":["A-Gradle"],"fileTypesAndContributionMap":{}},{"hash":"797f800c8f3fbf35caa23d4b8e4201b004559198","isMergeCommit":false,"messageTitle":"Add JUnit test","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":65,"deletions":0}}},{"hash":"02fc9227dcecb11c02610718a7379ce0a8c0f36f","isMergeCommit":true,"messageTitle":"Merge branch \u0027A-JUnit\u0027","messageBody":"* A-JUnit:\n Add JUnit test\n","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{}}]},{"date":"2023-09-03","commitResults":[{"hash":"c6868a47db194bd64a707db35ebe2903939c5f7e","isMergeCommit":false,"messageTitle":"Edit commands","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":4}}},{"hash":"eacac0ca1a59d50626553abb4ef462c69a02561f","isMergeCommit":false,"messageTitle":"Add javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":287,"deletions":2}}},{"hash":"d61bfa3ab615ae3b8283435cb02d9f3672ff0fdb","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-JavaDoc\u0027","messageBody":"* branch-A-JavaDoc:\n Add javadoc\n","tags":["A-JavaDoc"],"fileTypesAndContributionMap":{}},{"hash":"27bab6af8b533b074a3de3d3c8860b0dd4b44d3a","isMergeCommit":false,"messageTitle":"Edit style","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":7}}},{"hash":"ceffd60e1081dabcbdd474eceae02c0346d3987b","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-CodingStandard\u0027","messageBody":"* branch-A-CodingStandard:\n Edit style\n\n# Conflicts:\n#\tsrc/main/java/duke/task/Task.java\n","tags":["A-CodingStandard"],"fileTypesAndContributionMap":{}},{"hash":"d4348b99a01d57e3f8bb6c9b773cb713ccca3373","isMergeCommit":false,"messageTitle":"Add find command","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":57,"deletions":3}}},{"hash":"46b96cd080f997afcc5d9e54183fea8e5962b800","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-9\u0027","messageBody":"* branch-Level-9:\n Add find command\n\n# Conflicts:\n#\tsrc/main/java/duke/task/Task.java\n","tags":["Level-9"],"fileTypesAndContributionMap":{}},{"hash":"9f45aabf380bee6ab3fd5f59a4f41252845126d0","isMergeCommit":false,"messageTitle":"Edit javadoc","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"WeeMingQing":{"java":1167,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":11}},"authorContributionVariance":{"WeeMingQing":82006.06},"authorDisplayNameMap":{"WeeMingQing":"CS2103T-W12-2 WEE ..QING"}} diff --git a/WinSheng1_ip_master/authorship.json b/WinSheng1_ip_master/authorship.json index 7adf9bf2..eaef612e 100644 --- a/WinSheng1_ip_master/authorship.json +++ b/WinSheng1_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"# seedu.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":"WinSheng1"},"content":"3. After that, locate the `src/main/java/seedu.duke.Duke.java` file, right-click it, and choose `Run seedu.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":{"WinSheng1":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"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":"WinSheng1"},"content":" archiveBaseName \u003d \"seedu.duke\"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WinSheng1":1,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"[T] | 0 | x","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"[T] | 0 | x","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":2}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.util.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" private Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public static boolean isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" System.err.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" while (!isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" parser.parseUserInput(ui.getUserInput(), taskList, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" new Duke(\"./data/seedu.duke.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WinSheng1":37,"-":2}},{"path":"src/main/java/seedu/duke/exceptions/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" super(\"Invalid Command.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" + \"Below are the list of commands:\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" + \"list - displays the list of tasks\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" + \"mark x - marks task x as done\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" + \"unmark x - marks task x as undone\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" + \"delete x - deletes task x\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" + \"todo x - creates task with description x\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" + \"deadline x /by y - creates task with description x by deadline y\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" + \"event x /from y /to z - creates task with description x from y to z\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"WinSheng1":16}},{"path":"src/main/java/seedu/duke/exceptions/MissingInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"public class MissingInputException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" public MissingInputException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"WinSheng1":8}},{"path":"src/main/java/seedu/duke/tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" DateTimeFormatter formatter \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" .parseCaseInsensitive()","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" .toFormatter();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" this.dateTime \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" this.dateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by dd/mm/yyyy hhmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString() + \" (by: \" + dateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + dateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":45}},{"path":"src/main/java/seedu/duke/tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime toDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" DateTimeFormatter formatter \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" .parseCaseInsensitive()","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" .toFormatter();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" this.fromDateTime \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" this.toDateTime \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" this.fromDateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" this.toDateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" + \"event task /from yyyy-mm-dd hhmm /to yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /from dd/mm/yyyy hhmm /to dd/mm/yyyy hhmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString() + \" (from: \" + fromDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \" to \" + toDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + fromDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \" + toDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":48}},{"path":"src/main/java/seedu/duke/tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" public String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" public boolean isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" public abstract String type();","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" public void updateTaskStatus(boolean expectedStatus, String doneMessage, String undoneMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" if (isDone \u003d\u003d expectedStatus) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" System.out.println(doneMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" isDone \u003d expectedStatus;","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" System.out.println(undoneMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":33}},{"path":"src/main/java/seedu/duke/tasks/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":23}},{"path":"src/main/java/seedu/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.exceptions.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.exceptions.MissingInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.tasks.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" public void parseUserInput(String userInput, TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" String firstWord \u003d individualWords[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" String lowerCapsFirstWord \u003d firstWord.toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" switch (lowerCapsFirstWord) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" Duke.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" listTasks(taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" markTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" unmarkTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" deleteTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" addTodoTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" addDeadlineTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" addEventTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" storage.save(taskList.getAllTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" ui.showError(\"Cannot save tasks.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" } catch (MissingInputException | InvalidCommandException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" private void listTasks(TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" if (taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"You have 0 task.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"Here are your tasks:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage((i + 1) + \".\" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" private void markTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to mark cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to mark.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(true, \"Task \" + (taskNumber + 1) + \" is already done!\", \"Great job! Task \" + (taskNumber + 1) + \" is done!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WinSheng1"},"content":" ui.showError(\"Invalid task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WinSheng1"},"content":" private void unmarkTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to unmark cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to unmark.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(false, \"Task \" + (taskNumber + 1) + \" is still incomplete.\", \"Okay, I\u0027ve updated Task \" + (taskNumber + 1) + \" to be incomplete.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"WinSheng1"},"content":" ui.showError(\"Invalid task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"WinSheng1"},"content":" private void deleteTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to be deleted cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to be deleted.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"WinSheng1"},"content":" Task deletedTask \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"WinSheng1"},"content":" taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"This task has been removed:\\n \" + deletedTask + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\\n\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"WinSheng1"},"content":" ui.showError(\"Invalid task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"WinSheng1"},"content":" private void addTodoTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"The description of a todo cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"WinSheng1"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"WinSheng1"},"content":" private void addDeadlineTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ by.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"WinSheng1"},"content":" String fullStr \u003d userInput.substring(9);","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"WinSheng1"},"content":" String[] parts \u003d fullStr.split(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"WinSheng1"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"WinSheng1"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"WinSheng1"},"content":" Deadline task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"WinSheng1"},"content":" if (task.dateTime !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"WinSheng1"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ by.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"WinSheng1"},"content":" private void addEventTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ from/ to.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"WinSheng1"},"content":" String fullStr \u003d userInput.substring(6);","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"WinSheng1"},"content":" String[] partialStr \u003d fullStr.split(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"WinSheng1"},"content":" String description \u003d partialStr[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"WinSheng1"},"content":" String[] toFrom \u003d partialStr[1].split(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"WinSheng1"},"content":" String from \u003d toFrom[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"WinSheng1"},"content":" String to \u003d toFrom[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"WinSheng1"},"content":" Event task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"WinSheng1"},"content":" if (task.fromDateTime !\u003d null \u0026\u0026 task.toDateTime !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"WinSheng1"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ from/ to.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":201}},{"path":"src/main/java/seedu/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.tasks.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" FileReader reader \u003d new FileReader(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(reader);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" String fileLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" while ((fileLine \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d createTaskFromFile(fileLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" bufferedReader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" String taskFileString \u003d task.toFileString();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" writer.write(taskFileString + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" writer.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" private static Task createTaskFromFile(String fileLine) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" String[] parts \u003d fileLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c parts.length; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" parts[i] \u003d parts[i].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" if (type.equals(\"[T]\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" } else if (type.equals(\"[D]\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" task.isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":79}},{"path":"src/main/java/seedu/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" return tasks.isEmpty();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" return new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":37}},{"path":"src/main/java/seedu/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Hi! I\u0027m TaskMate.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" + \"What can I do for you today?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Goodbye! See you next time!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Error: \" + errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Enter command: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" public void printLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"___________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":40}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"WinSheng1":4}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"java -classpath ..\\bin seedu.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":{"WinSheng1":1,"-":20}}] +[{"path":"README.md","fileType":"md","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"# seedu.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":"WinSheng1"},"content":"3. After that, locate the `src/main/java/seedu.duke.Duke.java` file, right-click it, and choose `Run seedu.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":{"WinSheng1":2,"-":22}},{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"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":"WinSheng1"},"content":" archiveBaseName \u003d \"seedu.duke\"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"WinSheng1":1,"-":41}},{"path":"data/duke.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"[T] | 0 | x","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"[T] | 0 | x","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":2}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.util.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.util.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.util.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.util.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" private TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" private Parser parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public static boolean isDone \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public Duke(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" taskList \u003d new TaskList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" System.err.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" ui.showWelcome();","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" while (!isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" parser.parseUserInput(ui.getUserInput(), taskList, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" new Duke(\"./data/seedu.duke.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"WinSheng1":37,"-":2}},{"path":"src/main/java/seedu/duke/exception/InvalidCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"public class InvalidCommandException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" public InvalidCommandException() {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" super(\"Invalid Command.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" + \"Below are the list of commands:\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" + \"list - displays the list of tasks\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" + \"mark x - marks task x as done\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" + \"unmark x - marks task x as undone\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" + \"delete x - deletes task x\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" + \"todo x - creates task with description x\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" + \"deadline x /by y - creates task with description x by deadline y\\n\"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" + \"event x /from y /to z - creates task with description x from y to z\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"WinSheng1":16}},{"path":"src/main/java/seedu/duke/exception/MissingInputException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"public class MissingInputException extends Exception {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" public MissingInputException(String message) {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" super(message);","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"WinSheng1":8}},{"path":"src/main/java/seedu/duke/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime dateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" DateTimeFormatter formatter \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" .parseCaseInsensitive()","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" .toFormatter();","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" this.dateTime \u003d LocalDateTime.parse(by, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" this.dateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by dd/mm/yyyy hhmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" return \"[D]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + dateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString() + \" (by: \" + dateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":45}},{"path":"src/main/java/seedu/duke/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeFormatterBuilder;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime fromDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" public LocalDateTime toDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-25"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" DateTimeFormatter formatter \u003d new DateTimeFormatterBuilder()","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" .parseCaseInsensitive()","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" .appendOptional(DateTimeFormatter.ofPattern(\"d/M/yyyy HHmm\"))","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" .toFormatter();","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" this.fromDateTime \u003d LocalDateTime.parse(from, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" this.toDateTime \u003d LocalDateTime.parse(to, formatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" this.fromDateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" this.toDateTime \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" + \"event task /from yyyy-mm-dd hhmm /to yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /from dd/mm/yyyy hhmm /to dd/mm/yyyy hhmm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" return \"[E]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \" + fromDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\")) + \" | \" + toDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd HHmm\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString() + \" (from: \" + fromDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \" to \" + toDateTime.format(DateTimeFormatter.ofPattern(\"MMM d yyyy h:mma\")) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":48}},{"path":"src/main/java/seedu/duke/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":" public String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" public boolean isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-25"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" public abstract String type();","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" public abstract String toFileString();","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-25"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-25"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-08-25"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" return \"[\" + getStatusIcon() + \"] \" + description;","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" public String getDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" return this.description;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" public void updateTaskStatus(boolean expectedStatus, String doneMessage, String undoneMessage) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" if (isDone \u003d\u003d expectedStatus) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" System.out.println(doneMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" isDone \u003d expectedStatus;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" System.out.println(undoneMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":37}},{"path":"src/main/java/seedu/duke/task/ToDo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"public class ToDo extends Task {","lastModifiedDate":"2023-08-25"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":" public ToDo(String description) {","lastModifiedDate":"2023-08-25"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" super(description);","lastModifiedDate":"2023-08-25"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-25"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public String type() {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" return \"[T]\";","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-25"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" public String toFileString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" return type() + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" return type() + super.toString();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-08-25"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-08-25"}],"authorContributionMap":{"WinSheng1":23}},{"path":"src/main/java/seedu/duke/util/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.exception.InvalidCommandException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.exception.MissingInputException;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" public void parseUserInput(String userInput, TaskList taskList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" String firstWord \u003d individualWords[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" String lowerCapsFirstWord \u003d firstWord.toLowerCase();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" switch (lowerCapsFirstWord) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" case \"bye\":","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" Duke.isDone \u003d true;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" case \"list\":","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" listTasks(taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" case \"mark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" markTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" unmarkTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" case \"delete\":","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" deleteTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":" case \"todo\":","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" addTodoTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" addDeadlineTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":" case \"event\":","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" addEventTask(userInput, taskList, ui);","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" throw new InvalidCommandException();","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":" storage.save(taskList.getAllTasks());","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" ui.showError(\"Cannot save tasks.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" } catch (MissingInputException | InvalidCommandException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" private void listTasks(TaskList taskList, Ui ui) {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":" if (taskList.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"You have 0 task.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"Here are your tasks:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c taskList.getSize(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(i);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage((i + 1) + \".\" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" private void markTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to mark cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to mark.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(5)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":90,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(true, \"Task \" + (taskNumber + 1) + \" is already done!\", \"Great job! Task \" + (taskNumber + 1) + \" is done!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":92,"author":{"gitId":"WinSheng1"},"content":" ui.showError(\"Invalid task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":95,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":96,"author":{"gitId":"WinSheng1"},"content":" private void unmarkTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":97,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":98,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to unmark cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to unmark.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":105,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":106,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":109,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(false, \"Task \" + (taskNumber + 1) + \" is still incomplete.\", \"Okay, I\u0027ve updated Task \" + (taskNumber + 1) + \" to be incomplete.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":110,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException | IndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":111,"author":{"gitId":"WinSheng1"},"content":" ui.showError(\"Invalid task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"WinSheng1"},"content":" private void deleteTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"Task to be deleted cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"WinSheng1"},"content":" if (taskList.isEmpty()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"WinSheng1"},"content":" throw new IndexOutOfBoundsException(\"There are no tasks to be deleted.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":124,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":125,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":126,"author":{"gitId":"WinSheng1"},"content":" int taskNumber \u003d Integer.parseInt(userInput.substring(7)) - 1;","lastModifiedDate":"2023-09-02"},{"lineNumber":127,"author":{"gitId":"WinSheng1"},"content":" Task deletedTask \u003d taskList.getTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":128,"author":{"gitId":"WinSheng1"},"content":" taskList.deleteTask(taskNumber);","lastModifiedDate":"2023-09-02"},{"lineNumber":129,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"This task has been removed:\\n \" + deletedTask + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\\n\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":130,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":131,"author":{"gitId":"WinSheng1"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":132,"author":{"gitId":"WinSheng1"},"content":" ui.showError(\"Invalid task number.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":133,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":134,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":135,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":136,"author":{"gitId":"WinSheng1"},"content":" private void addTodoTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":137,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":138,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":139,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"The description of a todo cannot be empty!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":140,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":141,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":142,"author":{"gitId":"WinSheng1"},"content":" String description \u003d userInput.substring(5).trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":143,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":144,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":145,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":146,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":147,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":148,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":149,"author":{"gitId":"WinSheng1"},"content":" private void addDeadlineTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":150,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":151,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":152,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ by.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":153,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":154,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":155,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":156,"author":{"gitId":"WinSheng1"},"content":" String fullStr \u003d userInput.substring(9);","lastModifiedDate":"2023-09-02"},{"lineNumber":157,"author":{"gitId":"WinSheng1"},"content":" String[] parts \u003d fullStr.split(\"/by\");","lastModifiedDate":"2023-09-02"},{"lineNumber":158,"author":{"gitId":"WinSheng1"},"content":" String description \u003d parts[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":159,"author":{"gitId":"WinSheng1"},"content":" String by \u003d parts[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":160,"author":{"gitId":"WinSheng1"},"content":" Deadline task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":161,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":162,"author":{"gitId":"WinSheng1"},"content":" if (task.dateTime !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":163,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":164,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":165,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":166,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":167,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":168,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":169,"author":{"gitId":"WinSheng1"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":170,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ by.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":171,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":172,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":173,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":174,"author":{"gitId":"WinSheng1"},"content":" private void addEventTask(String userInput, TaskList taskList, Ui ui) throws MissingInputException {","lastModifiedDate":"2023-09-02"},{"lineNumber":175,"author":{"gitId":"WinSheng1"},"content":" String[] individualWords \u003d userInput.split(\" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":176,"author":{"gitId":"WinSheng1"},"content":" if (individualWords.length \u003c\u003d 1) {","lastModifiedDate":"2023-09-02"},{"lineNumber":177,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ from/ to.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":178,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":179,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":180,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":181,"author":{"gitId":"WinSheng1"},"content":" String fullStr \u003d userInput.substring(6);","lastModifiedDate":"2023-09-02"},{"lineNumber":182,"author":{"gitId":"WinSheng1"},"content":" String[] partialStr \u003d fullStr.split(\"/from\");","lastModifiedDate":"2023-09-02"},{"lineNumber":183,"author":{"gitId":"WinSheng1"},"content":" String description \u003d partialStr[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":184,"author":{"gitId":"WinSheng1"},"content":" String[] toFrom \u003d partialStr[1].split(\"/to\");","lastModifiedDate":"2023-09-02"},{"lineNumber":185,"author":{"gitId":"WinSheng1"},"content":" String from \u003d toFrom[0].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":186,"author":{"gitId":"WinSheng1"},"content":" String to \u003d toFrom[1].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":187,"author":{"gitId":"WinSheng1"},"content":" Event task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":188,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":189,"author":{"gitId":"WinSheng1"},"content":" if (task.fromDateTime !\u003d null \u0026\u0026 task.toDateTime !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":190,"author":{"gitId":"WinSheng1"},"content":" taskList.addTask(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":191,"author":{"gitId":"WinSheng1"},"content":" ui.showMessage(\"I\u0027ve added this task:\\n \" + task + \"\\nYou have a total of \" + taskList.getSize() + (taskList.getSize() \u003d\u003d 1 ? \" task.\" : \" tasks.\"));","lastModifiedDate":"2023-09-02"},{"lineNumber":192,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":193,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":194,"author":{"gitId":"WinSheng1"},"content":" ui.printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":195,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":196,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":197,"author":{"gitId":"WinSheng1"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":198,"author":{"gitId":"WinSheng1"},"content":" throw new MissingInputException(\"You are missing one or some of these inputs - description/ from/ to.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":199,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":200,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":201,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":201}},{"path":"src/main/java/seedu/duke/util/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.task.ToDo;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" public ArrayList\u003cTask\u003e load() throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" ArrayList\u003cTask\u003e tasks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" FileReader reader \u003d new FileReader(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" BufferedReader bufferedReader \u003d new BufferedReader(reader);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" String fileLine;","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" while ((fileLine \u003d bufferedReader.readLine()) !\u003d null) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" Task task \u003d createTaskFromFile(fileLine);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" bufferedReader.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"WinSheng1"},"content":" return tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"WinSheng1"},"content":" public void save(ArrayList\u003cTask\u003e tasks) throws IOException {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"WinSheng1"},"content":" FileWriter writer \u003d new FileWriter(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"WinSheng1"},"content":" for (Task task: tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"WinSheng1"},"content":" String taskFileString \u003d task.toFileString();","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"WinSheng1"},"content":" writer.write(taskFileString + \"\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"WinSheng1"},"content":" writer.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"WinSheng1"},"content":" private static Task createTaskFromFile(String fileLine) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"WinSheng1"},"content":" String[] parts \u003d fileLine.split(\"\\\\|\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"WinSheng1"},"content":" for (int i \u003d 0; i \u003c parts.length; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"WinSheng1"},"content":" parts[i] \u003d parts[i].trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"WinSheng1"},"content":" String type \u003d parts[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"WinSheng1"},"content":" String description \u003d parts[2];","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"WinSheng1"},"content":" Task task;","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"WinSheng1"},"content":" if (type.equals(\"[T]\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"WinSheng1"},"content":" task \u003d new ToDo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"WinSheng1"},"content":" } else if (type.equals(\"[D]\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"WinSheng1"},"content":" String by \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"WinSheng1"},"content":" task \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"WinSheng1"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"WinSheng1"},"content":" String from \u003d parts[3];","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"WinSheng1"},"content":" String to \u003d parts[4];","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"WinSheng1"},"content":" task \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"WinSheng1"},"content":" task.isDone \u003d parts[1].equals(\"1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"WinSheng1"},"content":" return task;","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":79}},{"path":"src/main/java/seedu/duke/util/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import seedu.duke.task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"public class TaskList {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" private ArrayList\u003cTask\u003e tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" public TaskList(ArrayList\u003cTask\u003e tasks) {","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" return tasks.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" return tasks.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" public void addTask(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" tasks.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" public void deleteTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":" tasks.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":" return tasks.isEmpty();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" public ArrayList\u003cTask\u003e getAllTasks() {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" return new ArrayList\u003c\u003e(tasks);","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":37}},{"path":"src/main/java/seedu/duke/util/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.util;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":" private Scanner scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" public Ui() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" this.scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" public void showWelcome() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Hi! I\u0027m TaskMate.\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" + \"What can I do for you today?\");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Goodbye! See you next time!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":" public void showError(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Error: \" + errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"WinSheng1"},"content":" printLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"WinSheng1"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"WinSheng1"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"WinSheng1"},"content":" public String getUserInput() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"Enter command: \");","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"WinSheng1"},"content":" return this.scanner.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"WinSheng1"},"content":" public void printLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"WinSheng1"},"content":" System.out.println(\"___________________________________________________________________\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":40}},{"path":"src/test/java/seedu/duke/task/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" void testString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" Deadline task \u003d new Deadline(\"test\", \"2024-12-01 1532\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.toString(), \"[D][ ] test (by: Dec 1 2024 3:32PM)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" void testInvalidDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" new Deadline(\"test\", \"1234\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" assertEquals(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /by dd/mm/yyyy hhmm\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":23}},{"path":"src/test/java/seedu/duke/task/EventTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class EventTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" void testString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" Event task \u003d new Event(\"test\", \"2024-12-01 1532\", \"2024-12-03 1600\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.toString(), \"[E][ ] test (from: Dec 1 2024 3:32PM to Dec 3 2024 4:00PM)\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" void testInvalidDeadline() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" new Event(\"test\", \"1234\", \"1234\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":" assertEquals(\"Please use the following formats:\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"WinSheng1"},"content":" + \"event task /from yyyy-mm-dd hhmm /to yyyy-mm-dd hhmm\\n\"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"WinSheng1"},"content":" + \"deadline task /from dd/mm/yyyy hhmm /to dd/mm/yyyy hhmm\", e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":23}},{"path":"src/test/java/seedu/duke/task/TaskTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class TaskTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(\"test\");","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" void testStatusIcon() {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getStatusIcon(), \" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(true, \"\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getStatusIcon(), \"X\");","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" task.updateTaskStatus(false, \"\", \"\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getStatusIcon(), \" \");","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":16}},{"path":"src/test/java/seedu/duke/task/ToDoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"package seedu.duke.task;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"WinSheng1"},"content":"public class ToDoTest {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"WinSheng1"},"content":" void testDescription() {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(\"test1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.getDescription(), \"test1\");","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"WinSheng1"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"WinSheng1"},"content":" @Test","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"WinSheng1"},"content":" void testString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"WinSheng1"},"content":" ToDo task \u003d new ToDo(\"test2\");","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"WinSheng1"},"content":" assertEquals(task.toString(), \"[T][ ] test2\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"WinSheng1"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"WinSheng1":18}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"WinSheng1"},"content":"todo borrow book","lastModifiedDate":"2023-08-26"},{"lineNumber":2,"author":{"gitId":"WinSheng1"},"content":"list","lastModifiedDate":"2023-08-26"},{"lineNumber":3,"author":{"gitId":"WinSheng1"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-26"},{"lineNumber":4,"author":{"gitId":"WinSheng1"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"WinSheng1":4}},{"path":"text-ui-test/runtest.bat","fileType":"bat","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@ECHO OFF","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"REM create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if not exist ..\\bin mkdir ..\\bin","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"REM delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"if exist ACTUAL.TXT del ACTUAL.TXT","lastModifiedDate":"2020-08-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"REM compile the code into the bin folder","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"javac -cp ..\\src\\main\\java -Xlint:none -d ..\\bin ..\\src\\main\\java\\*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"IF ERRORLEVEL 1 (","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" echo ********** BUILD FAILURE **********","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" exit /b 1","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"REM no error here, errorlevel \u003d\u003d 0","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"REM run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"WinSheng1"},"content":"java -classpath ..\\bin seedu.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":{"WinSheng1":1,"-":20}}] diff --git a/WinSheng1_ip_master/commits.json b/WinSheng1_ip_master/commits.json index 0eb322f7..c800a25d 100644 --- a/WinSheng1_ip_master/commits.json +++ b/WinSheng1_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"WinSheng1":[{"date":"2023-08-23","commitResults":[{"hash":"fc84eaaa609f3ecdceb2f3eca7ab923506788849","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"ac583b6c351bf71ba737c2bdf3fe97147835faeb","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"04b37b60e5a5439ee669e476637ad05cc56a2937","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"e6b789bce8b3a89b02c391d297e91717c75428be","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"a0c1405ce7f808d8fca1270fc3fee1e824236294","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":30}}},{"hash":"bffe50c41a94c2dce116001b24e6d0c57b662200","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-26","commitResults":[{"hash":"b2e78aff3ce5018f810ae704e16810ce1fc75208","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"e355cdc4b600a6781ccac41adc07c2220eabffaa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f4f76d6328e195508133446b8491d7bad13a666f","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":37}}},{"hash":"3747a2474b4538855064502209e6ffa6d8a2feed","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1cf2649bb3f45efab4a41fe73f5ed1ae33b6f87a","isMergeCommit":false,"messageTitle":"Updated parts of code for readability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":65}}},{"hash":"2974f5e75ef2f30694556c6ca2ce6c9f77e32965","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":10}}}]},{"date":"2023-08-30","commitResults":[{"hash":"82c7b6d79c6f5498bb9dbd01960a7d526980b70a","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"6f8f8c95df216d90946c162061d684244fedcde5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"12f15d22992a8ad4546a5868992d76c8d668a76e","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"64e43c3700c6e2ffae3f73a1a78e2b91c164eeed","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":70,"deletions":21}}},{"hash":"3ca9dee05b13468b50cfc53cb2953059c8bd6c5e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"5bf43707702761c9082c8e3928e398b7f5c23c6b","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":345,"deletions":212}}},{"hash":"fbf8da63e637b4e92f55b27495cc23f971cef8ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4153606cbfb91e78f2a8c31c30bbd65f9dbece7b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":14},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"88af51667695702da5186dacaa36be6c569ea7de","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0616fc117aed77d33e128b51615fd5aced030850","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":0},"java":{"insertions":45,"deletions":37},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"WinSheng1":{"java":567,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":6}},"authorContributionVariance":{"WinSheng1":34905.715},"authorDisplayNameMap":{"WinSheng1":"CS2103T-W15-3 LIM ..HENG"}} +{"authorDailyContributionsMap":{"WinSheng1":[{"date":"2023-08-23","commitResults":[{"hash":"fc84eaaa609f3ecdceb2f3eca7ab923506788849","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":6}}}]},{"date":"2023-08-25","commitResults":[{"hash":"ac583b6c351bf71ba737c2bdf3fe97147835faeb","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["level-1"],"fileTypesAndContributionMap":{"java":{"insertions":17,"deletions":4}}},{"hash":"04b37b60e5a5439ee669e476637ad05cc56a2937","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["level-2"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":1}}},{"hash":"e6b789bce8b3a89b02c391d297e91717c75428be","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["level-3"],"fileTypesAndContributionMap":{"java":{"insertions":49,"deletions":8}}},{"hash":"a0c1405ce7f808d8fca1270fc3fee1e824236294","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":90,"deletions":30}}},{"hash":"bffe50c41a94c2dce116001b24e6d0c57b662200","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["level-4"],"fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-26","commitResults":[{"hash":"b2e78aff3ce5018f810ae704e16810ce1fc75208","isMergeCommit":false,"messageTitle":"A-TextUiTesting","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":4,"deletions":0},"java":{"insertions":3,"deletions":3}}},{"hash":"e355cdc4b600a6781ccac41adc07c2220eabffaa","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f4f76d6328e195508133446b8491d7bad13a666f","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["level-5"],"fileTypesAndContributionMap":{"java":{"insertions":75,"deletions":37}}},{"hash":"3747a2474b4538855064502209e6ffa6d8a2feed","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["level-6"],"fileTypesAndContributionMap":{"java":{"insertions":12,"deletions":0}}}]},{"date":"2023-08-28","commitResults":[{"hash":"1cf2649bb3f45efab4a41fe73f5ed1ae33b6f87a","isMergeCommit":false,"messageTitle":"Updated parts of code for readability","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":87,"deletions":65}}},{"hash":"2974f5e75ef2f30694556c6ca2ce6c9f77e32965","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":133,"deletions":10}}}]},{"date":"2023-08-30","commitResults":[{"hash":"82c7b6d79c6f5498bb9dbd01960a7d526980b70a","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":1,"deletions":1}}},{"hash":"6f8f8c95df216d90946c162061d684244fedcde5","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-7\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"12f15d22992a8ad4546a5868992d76c8d668a76e","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":2}}}]},{"date":"2023-09-01","commitResults":[{"hash":"64e43c3700c6e2ffae3f73a1a78e2b91c164eeed","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":3,"deletions":0},"java":{"insertions":70,"deletions":21}}},{"hash":"3ca9dee05b13468b50cfc53cb2953059c8bd6c5e","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-Level-8\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-09-02","commitResults":[{"hash":"5bf43707702761c9082c8e3928e398b7f5c23c6b","isMergeCommit":false,"messageTitle":"A-MoreOOP","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":3},"java":{"insertions":345,"deletions":212}}},{"hash":"fbf8da63e637b4e92f55b27495cc23f971cef8ee","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-A-MoreOOP\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4153606cbfb91e78f2a8c31c30bbd65f9dbece7b","isMergeCommit":false,"messageTitle":"A-Packages","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":60,"deletions":14},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"88af51667695702da5186dacaa36be6c569ea7de","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/add-gradle-support\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0616fc117aed77d33e128b51615fd5aced030850","isMergeCommit":false,"messageTitle":"A-Gradle","messageBody":"","fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"txt":{"insertions":2,"deletions":0},"java":{"insertions":45,"deletions":37},"bat":{"insertions":1,"deletions":1},"md":{"insertions":2,"deletions":2}}},{"hash":"21f1e9265d4f61c49c8b6ff24f0779a031a9865a","isMergeCommit":false,"messageTitle":"A-JUnit","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":113,"deletions":29}}}]}]},"authorFileTypeContributionMap":{"WinSheng1":{"java":651,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":1,"txt":6}},"authorContributionVariance":{"WinSheng1":47423.902},"authorDisplayNameMap":{"WinSheng1":"CS2103T-W15-3 LIM ..HENG"}} diff --git a/XihuaZ_ip_master/authorship.json b/XihuaZ_ip_master/authorship.json index cbb0b59e..7c676acd 100644 --- a/XihuaZ_ip_master/authorship.json +++ b/XihuaZ_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"data/task.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 wdwdwdw \u0026##\u0026 2019-12-02T16:48 \u0026##\u0026 2019-12-03T23:00","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 true \u0026##\u0026 fish \u0026##\u0026 2019-12-05T18:00 \u0026##\u0026 2019-12-06T18:00","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":2}},{"path":"src/main/java/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.IllegalExpressionBotException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import exception.IncompleteBotException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class Bot {","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public Bot(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" this.ui \u003d new Ui(new Scanner(System.in), taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" public static void main(String[] args) throws FileErrorBotException, DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" Bot bot \u003d new Bot(Storage.read());","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" bot.start();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" this.ui.start();","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"XihuaZ":26}},{"path":"src/main/java/ControlFlow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"import command.Command;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"import command.DeadlineCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import command.DeleteCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import command.ErrorCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import command.EventCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import command.ListCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import command.MarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import command.TerminateCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import command.TodoCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import command.UnmarkCommand;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"import exception.IllegalExpressionBotException;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"import exception.IncompleteBotException;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"import parsers.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"public class ControlFlow {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" private static final String MARK \u003d \"mark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" private static final String UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" private static final String LIST \u003d \"list\";","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" private static final String TODO \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" private static final String EVENT \u003d \"event\";","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" private static final String DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" private static final String TERMINATE \u003d \"bye\";","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" private static final String DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" public ControlFlow(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" public Command execute(String str) throws IllegalExpressionBotException,","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" IncompleteBotException, FileErrorBotException, DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" if (str.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! There is no task specified.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" String[] strSplit \u003d Parser.getSplitAtSpace(str);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" String taskName \u003d Parser.getLeftOfSplit(strSplit);","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" String remainder \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" if (strSplit.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":" remainder \u003d Parser.getRightOfSplit(strSplit);","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":" String[] taskSplit;","lastModifiedDate":"2023-08-28"},{"lineNumber":51,"author":{"gitId":"XihuaZ"},"content":" String taskDetail;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"XihuaZ"},"content":" String timeline;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"XihuaZ"},"content":" String[] timelineArr;","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"XihuaZ"},"content":" String timeFrom;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"XihuaZ"},"content":" String timeTo;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"XihuaZ"},"content":" switch(taskName) {","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.TERMINATE:","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"XihuaZ"},"content":" return new TerminateCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":61,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"XihuaZ"},"content":" return new TodoCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":64,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":65,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":66,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":67,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"XihuaZ"},"content":" taskSplit \u003d Parser.getSplitAtBy(remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":70,"author":{"gitId":"XihuaZ"},"content":" if (taskSplit.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":71,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The timing of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"XihuaZ"},"content":" taskDetail \u003d Parser.getLeftOfSplit(taskSplit);","lastModifiedDate":"2023-08-28"},{"lineNumber":74,"author":{"gitId":"XihuaZ"},"content":" timeline \u003d Parser.getRightOfSplit(taskSplit);","lastModifiedDate":"2023-08-28"},{"lineNumber":75,"author":{"gitId":"XihuaZ"},"content":" return new DeadlineCommand(this.taskList, taskDetail, timeline);","lastModifiedDate":"2023-08-28"},{"lineNumber":76,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":77,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":78,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":79,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"XihuaZ"},"content":" taskSplit \u003d Parser.getSplitAtFrom(remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":82,"author":{"gitId":"XihuaZ"},"content":" if (taskSplit.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":83,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The starting timing of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"XihuaZ"},"content":" taskDetail \u003d Parser.getLeftOfSplit(taskSplit);","lastModifiedDate":"2023-08-28"},{"lineNumber":86,"author":{"gitId":"XihuaZ"},"content":" timeline \u003d Parser.getRightOfSplit(taskSplit);","lastModifiedDate":"2023-08-28"},{"lineNumber":87,"author":{"gitId":"XihuaZ"},"content":" timelineArr \u003d Parser.getSplitAtTo(timeline);","lastModifiedDate":"2023-08-28"},{"lineNumber":88,"author":{"gitId":"XihuaZ"},"content":" if (timelineArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":89,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The ending timing of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"XihuaZ"},"content":" timeFrom \u003d Parser.getLeftOfSplit(timelineArr);","lastModifiedDate":"2023-08-28"},{"lineNumber":92,"author":{"gitId":"XihuaZ"},"content":" timeTo \u003d Parser.getRightOfSplit(timelineArr);","lastModifiedDate":"2023-08-28"},{"lineNumber":93,"author":{"gitId":"XihuaZ"},"content":" return new EventCommand(this.taskList, taskDetail, timeFrom, timeTo);","lastModifiedDate":"2023-08-28"},{"lineNumber":94,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":95,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":96,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":97,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"XihuaZ"},"content":" return new MarkCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":100,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":101,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":102,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":103,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"XihuaZ"},"content":" return new UnmarkCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":106,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":107,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":108,"author":{"gitId":"XihuaZ"},"content":" return new ListCommand(this.taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":110,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"XihuaZ"},"content":" return new DeleteCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"XihuaZ"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":116,"author":{"gitId":"XihuaZ"},"content":" throw new IllegalExpressionBotException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":118,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":119}},{"path":"src/main/java/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"import command.*;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import exception.IllegalExpressionBotException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import exception.IncompleteBotException;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private static final String INTRO \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" \"Hello! I\u0027m Bot\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" \"What can I do for you?\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" private final Scanner sc;","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskLst;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public Ui(Scanner sc, TaskList taskLst) {","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.taskLst \u003d taskLst;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" System.out.println(Ui.INTRO);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" this.begin();","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" private void begin() {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" String str;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" ControlFlow control \u003d new ControlFlow(taskLst);","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Command command \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" do {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" str \u003d sc.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" command \u003d control.execute(str);","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" command.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" } catch (IncompleteBotException | IllegalExpressionBotException |","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" FileErrorBotException | DateTimeParseBotException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" } while (!(command instanceof TerminateCommand));","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":47}},{"path":"src/main/java/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import exception.IllegalExpressionBotException;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" public static final String SPACER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" public abstract void execute() throws IllegalExpressionBotException, FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":11}},{"path":"src/main/java/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import task.Deadline;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final Deadline deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public DeadlineCommand(TaskList taskList, String taskDetail,","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" String dueDate) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.deadline \u003d new Deadline(taskDetail, dueDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.deadline + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" task in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" this.deadline + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":42}},{"path":"src/main/java/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private final int idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public DeleteCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" this.idx \u003d Integer.parseInt(taskDetail) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d this.taskList.get(this.idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" this.taskList.delete(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" \"Noted. I\u0027ve removed this task:\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/command/ErrorCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.IllegalExpressionBotException;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"public class ErrorCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws IllegalExpressionBotException {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" throw new IllegalExpressionBotException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":11}},{"path":"src/main/java/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import task.Event;","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final Event event;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public EventCommand(TaskList taskList, String taskDetail, String timeFrom,","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" String timeTo) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.event \u003d new Event(taskDetail, timeFrom, timeTo);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.event);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.event + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" task in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" this.event + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":43}},{"path":"src/main/java/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" \"Here are the tasks in your list:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" this.taskList.list() +","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":23}},{"path":"src/main/java/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public MarkCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d taskList.get(Integer.parseInt(taskDetail) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" this.task.setComplete();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" \"Nice! I\u0027ve marked this task as done:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":32}},{"path":"src/main/java/command/TerminateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class TerminateCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String MESSAGE \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return TerminateCommand.MESSAGE;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":16}},{"path":"src/main/java/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import task.Todo;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final Todo todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public TodoCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" this.todo \u003d new Todo(taskDetail);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" this.todo + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" task in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this task:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" this.todo + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":41}},{"path":"src/main/java/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package command;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import task.Task;","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import storage.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public UnmarkCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d taskList.get(Integer.parseInt(taskDetail) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" this.task.setIncomplete();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" \"OK, I\u0027ve marked this task as not done yet:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":32}},{"path":"src/main/java/exception/BotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"import java.lang.Exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"public class BotException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" public static final String SPACER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" public BotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" return BotException.SPACER + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" super.getMessage() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" BotException.SPACER;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":17}},{"path":"src/main/java/exception/DateTimeParseBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class DateTimeParseBotException extends BotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public DateTimeParseBotException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/exception/FileErrorBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package exception;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class FileErrorBotException extends BotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public FileErrorBotException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/exception/IllegalExpressionBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class IllegalExpressionBotException extends BotException {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public IllegalExpressionBotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/exception/IncompleteBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class IncompleteBotException extends BotException {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public IncompleteBotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/parsers/DatetimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package parsers;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class DatetimeParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" public static LocalDateTime parseTimeInput(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return LocalDateTime.parse(str, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" throw new DateTimeParseBotException(\"Please write your dateTime as d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public static String reformatTimeOutput(LocalDateTime time) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return time.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static LocalDateTime convertToLocalDateTime(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" return LocalDateTime.parse(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" throw new DateTimeParseBotException(\"The dateTime format is corrupted \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"in the ./data/task.txt.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/parsers/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package parsers;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class Parser {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_SPACE \u003d \" \";","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_BY \u003d \" /by \";","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_FROM \u003d \" /from \";","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_TO \u003d \" /to \";","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtSpace(String str) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" return str.split(Parser.SPLIT_AT_SPACE, 2);","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtBy(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return str.split(Parser.SPLIT_AT_BY, 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtFrom(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return str.split(Parser.SPLIT_AT_FROM, 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtTo(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return str.split(Parser.SPLIT_AT_TO, 2);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static String getLeftOfSplit(String[] arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" return arr[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public static String getRightOfSplit(String[] arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" return arr[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/parsers/StorageParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package parsers;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import task.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import task.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import task.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class StorageParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private static final String UNIQUE_FILE_SEPARATOR \u003d \" \u0026##\u0026 \";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private static final String TODO_HEADER \u003d \"[T] \";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private static final String DEADLINE_HEADER \u003d \"[D] \";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public static Task parseFileInput(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" String[] stringArr \u003d str.split(StorageParser.UNIQUE_FILE_SEPARATOR);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" switch(stringArr[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" case StorageParser.TODO_HEADER:","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return new Todo(stringArr[1], stringArr[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" case StorageParser.DEADLINE_HEADER:","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" return new Deadline(stringArr[1], stringArr[2], stringArr[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return new Event(stringArr[1], stringArr[2], stringArr[3], stringArr[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":25}},{"path":"src/main/java/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import task.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import exception.FileErrorBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import task.TaskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import parsers.StorageParser;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" private static final String FILE_NAME \u003d \"task.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" private static final String FILE_RELATIVE_PATH \u003d \"data\" + File.separator;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" private static final String WORKING_DIRECTORY \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" private static final String ABSOLUTE_FILE_PATH \u003d Storage.WORKING_DIRECTORY + File.separator +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.FILE_RELATIVE_PATH;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static void save(TaskList taskList) throws FileErrorBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" File file \u003d new File(Storage.ABSOLUTE_FILE_PATH +","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" File.separator + Storage.FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" BufferedWriter bw \u003d new BufferedWriter(new FileWriter(file));","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" Iterator\u003cTask\u003e iterator \u003d taskList.iterator();","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" while(iterator.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" bw.write(iterator.next().fileWriteFormatted());","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" bw.newLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" bw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" throw new FileErrorBotException(\"File cannot be saved...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" public static TaskList read() throws FileErrorBotException, DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" File file \u003d new File(Storage.ABSOLUTE_FILE_PATH +","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" File.separator + Storage.FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":" BufferedReader br \u003d new BufferedReader(new FileReader(file));","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":" while (br.ready()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":" taskList.add(StorageParser.parseFileInput(br.readLine()));","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"XihuaZ"},"content":" br.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"XihuaZ"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"XihuaZ"},"content":" throw new FileErrorBotException(\"File cannot be saved...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"XihuaZ"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":59}},{"path":"src/main/java/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import parsers.DatetimeParser;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[D] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime time;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public Deadline(String name, String time) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.time \u003d DatetimeParser.parseTimeInput(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public Deadline(String bool, String name, String time) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.time \u003d DatetimeParser.convertToLocalDateTime(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" return Deadline.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR +","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" super.fileWriteFormatted() + Task.UNIQUE_FILE_SEPARATOR + this.time;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" return Deadline.TASK_HEADER + super.toString() + \"(by: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" DatetimeParser.reformatTimeOutput(this.time) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import parsers.DatetimeParser;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import parsers.Parser;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[E] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime startTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public Event(String name, String startTime, String endTime) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.startTime \u003d DatetimeParser.parseTimeInput(startTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.endTime \u003d DatetimeParser.parseTimeInput(endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public Event(String bool, String name, String startTime, String endTime) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" this.startTime \u003d DatetimeParser.convertToLocalDateTime(startTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" this.endTime \u003d DatetimeParser.convertToLocalDateTime(endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Event.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR +","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" super.fileWriteFormatted() + Task.UNIQUE_FILE_SEPARATOR + this.startTime +","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" Task.UNIQUE_FILE_SEPARATOR + this.endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" return Event.TASK_HEADER + super.toString()+","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" \" (from: \" + DatetimeParser.reformatTimeOutput(this.startTime) +","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" \" to: \" + DatetimeParser.reformatTimeOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":40}},{"path":"src/main/java/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String COMPLETE \u003d \"[X] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" private static final String INCOMPLETE \u003d \"[ ] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" protected static final String UNIQUE_FILE_SEPARATOR \u003d \" \u0026##\u0026 \";","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private final String name;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void setComplete() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public void setIncomplete() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" return \"true\" + Task.UNIQUE_FILE_SEPARATOR + this.name;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" return \"false\" + Task.UNIQUE_FILE_SEPARATOR + this.name;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" return Task.COMPLETE + this.name;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" return Task.INCOMPLETE + this.name;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":45}},{"path":"src/main/java/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private final ArrayList\u003cTask\u003e lst;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" this.lst \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public TaskList(ArrayList\u003cTask\u003e lst) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.lst \u003d lst;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.lst.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return this.lst.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public int length() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" return this.lst.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public void delete(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" this.lst.remove(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return this.lst.iterator();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" public String list() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" Iterator\u003cTask\u003e iterator \u003d this.iterator();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" while (iterator.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" str +\u003d Integer.toString(i) + \". \" + iterator.next() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" i++;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" return str;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":48}},{"path":"src/main/java/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package task;","lastModifiedDate":"2023-08-29"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[T] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public Todo(String bool, String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" return Todo.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR + super.fileWriteFormatted();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" return Todo.TASK_HEADER + super.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"todo homework","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"todo assignments","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"event cca /from 5pm /to 7pm","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"event birthday /from 22/7/2023 /to 23/7/2023","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"deadline homework /by tomorrow","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"deadline HM21 /by monday","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"list","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"bye","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":8}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"java -classpath ../bin Bot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"XihuaZ":1,"-":37}}] +[{"path":"data/task.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 wdwdwdw \u0026##\u0026 2019-12-02T16:48 \u0026##\u0026 2019-12-03T23:00","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 fish \u0026##\u0026 2019-12-05T18:00 \u0026##\u0026 2019-12-06T18:00","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"[T] \u0026##\u0026 true \u0026##\u0026 yummy","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"[D] \u0026##\u0026 false \u0026##\u0026 done \u0026##\u0026 2023-02-25T19:30","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"[E] \u0026##\u0026 false \u0026##\u0026 homework \u0026##\u0026 2023-09-10T18:00 \u0026##\u0026 2023-09-20T18:00","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"XihuaZ":5}},{"path":"src/main/java/bot/Bot.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-26"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-26"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class Bot {","lastModifiedDate":"2023-08-26"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final Ui ui;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public Bot(TaskList taskList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.ui \u003d new Ui(new Scanner(System.in), taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public static void main(String[] args) throws FileErrorBotException,","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" DateTimeParseBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Bot bot \u003d new Bot(Storage.read());","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" bot.start();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" this.ui.start();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-26"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-26"}],"authorContributionMap":{"XihuaZ":28}},{"path":"src/main/java/bot/ControlFlow.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.command.Command;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.command.DeadlineCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.command.DeleteCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.command.EventCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.command.ListCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import bot.command.MarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import bot.command.TerminateCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import bot.command.TodoCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import bot.command.UnmarkCommand;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IllegalExpressionBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IncompleteBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.InputParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"public class ControlFlow {","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" private static final String MARK \u003d \"mark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" private static final String UNMARK \u003d \"unmark\";","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" private static final String LIST \u003d \"list\";","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" private static final String TODO \u003d \"todo\";","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" private static final String EVENT \u003d \"event\";","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" private static final String DEADLINE \u003d \"deadline\";","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" private static final String TERMINATE \u003d \"bye\";","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" private static final String DELETE \u003d \"delete\";","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" public ControlFlow(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" public Command execute(String str) throws IllegalExpressionBotException,","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" IncompleteBotException, FileErrorBotException, DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" if (str.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! There is no bot.task specified.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" String[] strSplit \u003d InputParser.getSplitAtSpace(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" String taskName \u003d InputParser.getLeftOfSplit(strSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" String remainder \u003d \"\";","lastModifiedDate":"2023-08-29"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":" if (strSplit.length \u003e 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":" remainder \u003d InputParser.getRightOfSplit(strSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":51,"author":{"gitId":"XihuaZ"},"content":" String[] taskSplit;","lastModifiedDate":"2023-08-28"},{"lineNumber":52,"author":{"gitId":"XihuaZ"},"content":" String taskDetail;","lastModifiedDate":"2023-08-28"},{"lineNumber":53,"author":{"gitId":"XihuaZ"},"content":" String timeline;","lastModifiedDate":"2023-08-28"},{"lineNumber":54,"author":{"gitId":"XihuaZ"},"content":" String[] timelineArr;","lastModifiedDate":"2023-08-28"},{"lineNumber":55,"author":{"gitId":"XihuaZ"},"content":" String timeFrom;","lastModifiedDate":"2023-08-28"},{"lineNumber":56,"author":{"gitId":"XihuaZ"},"content":" String timeTo;","lastModifiedDate":"2023-08-28"},{"lineNumber":57,"author":{"gitId":"XihuaZ"},"content":" switch(taskName) {","lastModifiedDate":"2023-08-28"},{"lineNumber":58,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.TERMINATE:","lastModifiedDate":"2023-08-28"},{"lineNumber":59,"author":{"gitId":"XihuaZ"},"content":" return new TerminateCommand();","lastModifiedDate":"2023-08-28"},{"lineNumber":60,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.TODO:","lastModifiedDate":"2023-08-28"},{"lineNumber":61,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":62,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of a todo cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":63,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":64,"author":{"gitId":"XihuaZ"},"content":" return new TodoCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":65,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":66,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.DEADLINE:","lastModifiedDate":"2023-08-28"},{"lineNumber":67,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":68,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":69,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":70,"author":{"gitId":"XihuaZ"},"content":" taskSplit \u003d InputParser.getSplitAtBy(remainder);","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"XihuaZ"},"content":" if (taskSplit.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":72,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The timing of a deadline cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":73,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":74,"author":{"gitId":"XihuaZ"},"content":" taskDetail \u003d InputParser.getLeftOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"XihuaZ"},"content":" timeline \u003d InputParser.getRightOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"XihuaZ"},"content":" return new DeadlineCommand(this.taskList, taskDetail, timeline);","lastModifiedDate":"2023-08-28"},{"lineNumber":77,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":78,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.EVENT:","lastModifiedDate":"2023-08-28"},{"lineNumber":79,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":80,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The description of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":81,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":82,"author":{"gitId":"XihuaZ"},"content":" taskSplit \u003d InputParser.getSplitAtFrom(remainder);","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"XihuaZ"},"content":" if (taskSplit.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":84,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The starting timing of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":85,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":86,"author":{"gitId":"XihuaZ"},"content":" taskDetail \u003d InputParser.getLeftOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"XihuaZ"},"content":" timeline \u003d InputParser.getRightOfSplit(taskSplit);","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"XihuaZ"},"content":" timelineArr \u003d InputParser.getSplitAtTo(timeline);","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"XihuaZ"},"content":" if (timelineArr.length \u003d\u003d 1) {","lastModifiedDate":"2023-08-29"},{"lineNumber":90,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The ending timing of an event cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":91,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":92,"author":{"gitId":"XihuaZ"},"content":" timeFrom \u003d InputParser.getLeftOfSplit(timelineArr);","lastModifiedDate":"2023-09-02"},{"lineNumber":93,"author":{"gitId":"XihuaZ"},"content":" timeTo \u003d InputParser.getRightOfSplit(timelineArr);","lastModifiedDate":"2023-09-02"},{"lineNumber":94,"author":{"gitId":"XihuaZ"},"content":" return new EventCommand(this.taskList, taskDetail, timeFrom, timeTo);","lastModifiedDate":"2023-08-28"},{"lineNumber":95,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":96,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.MARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":97,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":98,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to mark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":99,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":100,"author":{"gitId":"XihuaZ"},"content":" return new MarkCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":101,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":102,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.UNMARK:","lastModifiedDate":"2023-08-28"},{"lineNumber":103,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":104,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":105,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":106,"author":{"gitId":"XihuaZ"},"content":" return new UnmarkCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-28"},{"lineNumber":107,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":108,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.LIST:","lastModifiedDate":"2023-08-28"},{"lineNumber":109,"author":{"gitId":"XihuaZ"},"content":" return new ListCommand(this.taskList);","lastModifiedDate":"2023-08-28"},{"lineNumber":110,"author":{"gitId":"XihuaZ"},"content":" case ControlFlow.DELETE:","lastModifiedDate":"2023-08-29"},{"lineNumber":111,"author":{"gitId":"XihuaZ"},"content":" if (remainder.isBlank()) {","lastModifiedDate":"2023-08-29"},{"lineNumber":112,"author":{"gitId":"XihuaZ"},"content":" throw new IncompleteBotException(\"OOPS!!! The task number to unmark cannot be empty.\");","lastModifiedDate":"2023-08-29"},{"lineNumber":113,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-29"},{"lineNumber":114,"author":{"gitId":"XihuaZ"},"content":" return new DeleteCommand(this.taskList, remainder);","lastModifiedDate":"2023-08-29"},{"lineNumber":115,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":116,"author":{"gitId":"XihuaZ"},"content":" default:","lastModifiedDate":"2023-08-28"},{"lineNumber":117,"author":{"gitId":"XihuaZ"},"content":" throw new IllegalExpressionBotException(\"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":119,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":120,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":120}},{"path":"src/main/java/bot/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.command.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IllegalExpressionBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IncompleteBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"public class Ui {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" private static final String INTRO \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" \"Hello! I\u0027m Bot\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" \"What can I do for you?\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" private final Scanner sc;","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskLst;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public Ui(Scanner sc, TaskList taskLst) {","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" this.sc \u003d sc;","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" this.taskLst \u003d taskLst;","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" System.out.println(Ui.INTRO);","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" this.begin();","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" private void begin() {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" String str;","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" ControlFlow control \u003d new ControlFlow(taskLst);","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" Command command \u003d null;","lastModifiedDate":"2023-08-29"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" do {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" str \u003d sc.nextLine();","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-08-29"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" command \u003d control.execute(str);","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" command.execute();","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" } catch (IncompleteBotException | IllegalExpressionBotException |","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" FileErrorBotException | DateTimeParseBotException | IOException e) {","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" System.out.println(e);","lastModifiedDate":"2023-08-29"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" } while (!(command instanceof TerminateCommand));","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":50}},{"path":"src/main/java/bot/command/Command.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.IllegalExpressionBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public abstract class Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" public static final String SPACER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public abstract void execute() throws IllegalExpressionBotException, FileErrorBotException, IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":13}},{"path":"src/main/java/bot/command/DeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class DeadlineCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" private final Deadline deadline;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public DeadlineCommand(TaskList taskList, String taskDetail,","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" String dueDate) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.deadline \u003d new Deadline(taskDetail, dueDate);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.deadline);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" this.deadline + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" bot.task in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" this.deadline + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":44}},{"path":"src/main/java/bot/command/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-08-29"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final int idx;","lastModifiedDate":"2023-08-29"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-29"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public DeleteCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-29"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-29"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.idx \u003d Integer.parseInt(taskDetail) - 1;","lastModifiedDate":"2023-08-29"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d this.taskList.get(this.idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.taskList.delete(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-29"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-29"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-29"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Noted. I\u0027ve removed this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-29"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":35}},{"path":"src/main/java/bot/command/EventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class EventCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" private final Event event;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public EventCommand(TaskList taskList, String taskDetail, String timeFrom,","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" String timeTo) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.event \u003d new Event(taskDetail, timeFrom, timeTo);","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.event);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" this.event + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" bot.task in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" this.event + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":46}},{"path":"src/main/java/bot/command/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" public ListCommand(TaskList taskList) {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" \"Here are the tasks in your list:\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" this.taskList.list() +","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":23}},{"path":"src/main/java/bot/command/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"public class MarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public MarkCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d taskList.get(Integer.parseInt(taskDetail) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.task.setComplete();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Nice! I\u0027ve marked this bot.task as done:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":34}},{"path":"src/main/java/bot/command/TerminateCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class TerminateCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String MESSAGE \u003d \"____________________________________________________________\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" \" Bye. Hope to see you again soon!\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" \"____________________________________________________________\";","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" public void execute() {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return TerminateCommand.MESSAGE;","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":16}},{"path":"src/main/java/bot/command/TodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class TodoCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" private final Todo todo;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public TodoCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.todo \u003d new Todo(taskDetail);","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" this.taskList.add(this.todo);","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" if (this.taskList.length() \u003c\u003d 1) {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.todo + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" bot.task in the list.\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" \"Got it. I\u0027ve added this bot.task:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" this.todo + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" \"Now you have \" + this.taskList.length() + \" tasks in the list.\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":43}},{"path":"src/main/java/bot/command/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.command;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.storage.Storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"public class UnmarkCommand extends Command {","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final Task task;","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final TaskList taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" public UnmarkCommand(TaskList taskList, String taskDetail) {","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.task \u003d taskList.get(Integer.parseInt(taskDetail) - 1);","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.taskList \u003d taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void execute() throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.task.setIncomplete();","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.save(this.taskList);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" System.out.println(this);","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" return Command.SPACER + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"OK, I\u0027ve marked this bot.task as not done yet:\\n\" +","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" this.task + \"\\n\" +","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" Command.SPACER;","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":34}},{"path":"src/main/java/bot/exception/BotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"import java.lang.Exception;","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"public class BotException extends Exception {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" public static final String SPACER \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" public BotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" return BotException.SPACER + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" super.getMessage() + \"\\n\" +","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" BotException.SPACER;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":17}},{"path":"src/main/java/bot/exception/DateTimeParseBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class DateTimeParseBotException extends BotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public DateTimeParseBotException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/exception/FileErrorBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class FileErrorBotException extends BotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public FileErrorBotException(String errorMessage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/exception/IllegalExpressionBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class IllegalExpressionBotException extends BotException {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public IllegalExpressionBotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/exception/IncompleteBotException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.exception;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-29"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class IncompleteBotException extends BotException {","lastModifiedDate":"2023-08-29"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" public IncompleteBotException(String errorMessage) {","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" super(errorMessage);","lastModifiedDate":"2023-08-29"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-29"}],"authorContributionMap":{"XihuaZ":7}},{"path":"src/main/java/bot/parsers/DatetimeParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class DatetimeParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" public static LocalDateTime parseTimeInput(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return LocalDateTime.parse(str, formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" throw new DateTimeParseBotException(\"Please write your dateTime as d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public static String reformatTimeOutput(LocalDateTime time) {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"d/MM/yyyy HH:mm\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return time.format(formatter);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static LocalDateTime convertToLocalDateTime(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" return LocalDateTime.parse(str);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" throw new DateTimeParseBotException(\"The dateTime format is corrupted \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" \"in the ./data/bot.task.txt.\");","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/bot/parsers/InputParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class InputParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_SPACE \u003d \" \";","lastModifiedDate":"2023-08-29"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_BY \u003d \" /by \";","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_FROM \u003d \" /from \";","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private static final String SPLIT_AT_TO \u003d \" /to \";","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtSpace(String str) {","lastModifiedDate":"2023-08-29"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_SPACE, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtBy(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_BY, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtFrom(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_FROM, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public static String[] getSplitAtTo(String str) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return str.split(InputParser.SPLIT_AT_TO, 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static String getLeftOfSplit(String[] arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" return arr[0];","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public static String getRightOfSplit(String[] arr) {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" return arr[1];","lastModifiedDate":"2023-08-28"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/bot/parsers/StorageParser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.parsers;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Todo;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Event;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Deadline;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"public class StorageParser {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private static final String UNIQUE_FILE_SEPARATOR \u003d \" \u0026##\u0026 \";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private static final String TODO_HEADER \u003d \"[T] \";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private static final String DEADLINE_HEADER \u003d \"[D] \";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public static Task parseFileInput(String str) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" String[] stringArr \u003d str.split(StorageParser.UNIQUE_FILE_SEPARATOR);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" switch(stringArr[0]) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" case StorageParser.TODO_HEADER:","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" return new Todo(stringArr[1], stringArr[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" case StorageParser.DEADLINE_HEADER:","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" return new Deadline(stringArr[1], stringArr[2], stringArr[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" default:","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return new Event(stringArr[1], stringArr[2], stringArr[3], stringArr[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":25}},{"path":"src/main/java/bot/storage/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.task.Task;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.FileErrorBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import bot.task.TaskList;","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.StorageParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"import java.io.BufferedWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"import java.io.BufferedReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" private static final String FILE_NAME \u003d \"task.txt\";","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" private static final String FILE_RELATIVE_PATH \u003d \"data\" + File.separator;","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" private static final String WORKING_DIRECTORY \u003d System.getProperty(\"user.dir\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" private static final String ABSOLUTE_FILE_PATH \u003d Storage.WORKING_DIRECTORY + File.separator +","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" Storage.FILE_RELATIVE_PATH;","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public static void save(TaskList taskList) throws FileErrorBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" File file \u003d new File(Storage.ABSOLUTE_FILE_PATH +","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" File.separator + Storage.FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" try (BufferedWriter bw \u003d new BufferedWriter(new FileWriter(file))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" Iterator\u003cTask\u003e iterator \u003d taskList.iterator();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" while(iterator.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" bw.write(iterator.next().fileWriteFormatted());","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" bw.newLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" throw new FileErrorBotException(\"File cannot be saved...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" public static TaskList read() throws FileErrorBotException,","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" DateTimeParseBotException, IOException {","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" File file \u003d new File(Storage.ABSOLUTE_FILE_PATH +","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" File.separator + Storage.FILE_NAME);","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"XihuaZ"},"content":" file.createNewFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"XihuaZ"},"content":" TaskList taskList \u003d new TaskList();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"XihuaZ"},"content":" try (BufferedReader br \u003d new BufferedReader(new FileReader(file))) {","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"XihuaZ"},"content":" while (br.ready()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"XihuaZ"},"content":" taskList.add(StorageParser.parseFileInput(br.readLine()));","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"XihuaZ"},"content":" } catch (IOException exception) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"XihuaZ"},"content":" throw new FileErrorBotException(\"File cannot be saved...\");","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"XihuaZ"},"content":" return taskList;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"XihuaZ":61}},{"path":"src/main/java/bot/task/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.DatetimeParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[D] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime time;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" public Deadline(String name, String time) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.time \u003d DatetimeParser.parseTimeInput(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public Deadline(String bool, String name, String time) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" this.time \u003d DatetimeParser.convertToLocalDateTime(time);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" return Deadline.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR +","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" super.fileWriteFormatted() + Task.UNIQUE_FILE_SEPARATOR + this.time;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" return Deadline.TASK_HEADER + super.toString() + \"(by: \" +","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" DatetimeParser.reformatTimeOutput(this.time) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":33}},{"path":"src/main/java/bot/task/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import bot.exception.DateTimeParseBotException;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import bot.parsers.DatetimeParser;","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[E] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime startTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" private final LocalDateTime endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public Event(String name, String startTime, String endTime) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" this.startTime \u003d DatetimeParser.parseTimeInput(startTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.endTime \u003d DatetimeParser.parseTimeInput(endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" public Event(String bool, String name, String startTime, String endTime) throws DateTimeParseBotException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.startTime \u003d DatetimeParser.convertToLocalDateTime(startTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" this.endTime \u003d DatetimeParser.convertToLocalDateTime(endTime);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":" return Event.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR +","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" super.fileWriteFormatted() + Task.UNIQUE_FILE_SEPARATOR + this.startTime +","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" Task.UNIQUE_FILE_SEPARATOR + this.endTime;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return Event.TASK_HEADER + super.toString()+","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" \" (from: \" + DatetimeParser.reformatTimeOutput(this.startTime) +","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" \" to: \" + DatetimeParser.reformatTimeOutput(this.endTime) + \")\";","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":39}},{"path":"src/main/java/bot/task/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public abstract class Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String COMPLETE \u003d \"[X] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" private static final String INCOMPLETE \u003d \"[ ] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" protected static final String UNIQUE_FILE_SEPARATOR \u003d \" \u0026##\u0026 \";","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private final String name;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" public Task(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" public Task(String name, boolean isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" this.name \u003d name;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d isDone;","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public void setComplete() {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public void setIncomplete() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" if (this.isDone) {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" return \"true\" + Task.UNIQUE_FILE_SEPARATOR + this.name;","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":" return \"false\" + Task.UNIQUE_FILE_SEPARATOR + this.name;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" };","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" if (this.isDone) {","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" return Task.COMPLETE + this.name;","lastModifiedDate":"2023-08-28"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" } else {","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" return Task.INCOMPLETE + this.name;","lastModifiedDate":"2023-08-28"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":45}},{"path":"src/main/java/bot/task/TaskList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"public class TaskList {","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" private final ArrayList\u003cTask\u003e lst;","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public TaskList() {","lastModifiedDate":"2023-08-28"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" this.lst \u003d new ArrayList\u003cTask\u003e();","lastModifiedDate":"2023-08-28"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" public TaskList(ArrayList\u003cTask\u003e lst) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" this.lst \u003d lst;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":" public void add(Task task) {","lastModifiedDate":"2023-08-28"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" this.lst.add(task);","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" public Task get(int idx) {","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":" return this.lst.get(idx);","lastModifiedDate":"2023-08-28"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":25,"author":{"gitId":"XihuaZ"},"content":" public int length() {","lastModifiedDate":"2023-08-28"},{"lineNumber":26,"author":{"gitId":"XihuaZ"},"content":" return this.lst.size();","lastModifiedDate":"2023-08-28"},{"lineNumber":27,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":28,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":29,"author":{"gitId":"XihuaZ"},"content":" public void delete(int idx) {","lastModifiedDate":"2023-08-29"},{"lineNumber":30,"author":{"gitId":"XihuaZ"},"content":" this.lst.remove(idx);","lastModifiedDate":"2023-08-29"},{"lineNumber":31,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-29"},{"lineNumber":32,"author":{"gitId":"XihuaZ"},"content":" ","lastModifiedDate":"2023-08-29"},{"lineNumber":33,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":34,"author":{"gitId":"XihuaZ"},"content":" public Iterator\u003cTask\u003e iterator() {","lastModifiedDate":"2023-08-28"},{"lineNumber":35,"author":{"gitId":"XihuaZ"},"content":" return this.lst.iterator();","lastModifiedDate":"2023-08-28"},{"lineNumber":36,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":37,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":38,"author":{"gitId":"XihuaZ"},"content":" public String list() {","lastModifiedDate":"2023-08-28"},{"lineNumber":39,"author":{"gitId":"XihuaZ"},"content":" String str \u003d \"\";","lastModifiedDate":"2023-08-28"},{"lineNumber":40,"author":{"gitId":"XihuaZ"},"content":" Iterator\u003cTask\u003e iterator \u003d this.iterator();","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"XihuaZ"},"content":" int i \u003d 1;","lastModifiedDate":"2023-08-28"},{"lineNumber":42,"author":{"gitId":"XihuaZ"},"content":" while (iterator.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"XihuaZ"},"content":" str +\u003d Integer.toString(i) + \". \" + iterator.next() + \"\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"XihuaZ"},"content":" i++;","lastModifiedDate":"2023-08-28"},{"lineNumber":45,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":46,"author":{"gitId":"XihuaZ"},"content":" return str;","lastModifiedDate":"2023-08-28"},{"lineNumber":47,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":48,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":48}},{"path":"src/main/java/bot/task/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"package bot.task;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":" private static final String TASK_HEADER \u003d \"[T] \";","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":" public Todo(String name) {","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":" super(name);","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-08-28"},{"lineNumber":9,"author":{"gitId":"XihuaZ"},"content":" public Todo(String bool, String name) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"XihuaZ"},"content":" super(name, Boolean.parseBoolean(bool));","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"XihuaZ"},"content":" public String fileWriteFormatted() {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"XihuaZ"},"content":" return Todo.TASK_HEADER + Task.UNIQUE_FILE_SEPARATOR + super.fileWriteFormatted();","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"XihuaZ"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"XihuaZ"},"content":" @Override","lastModifiedDate":"2023-08-28"},{"lineNumber":19,"author":{"gitId":"XihuaZ"},"content":" public String toString() {","lastModifiedDate":"2023-08-28"},{"lineNumber":20,"author":{"gitId":"XihuaZ"},"content":" return Todo.TASK_HEADER + super.toString();","lastModifiedDate":"2023-08-28"},{"lineNumber":21,"author":{"gitId":"XihuaZ"},"content":" }","lastModifiedDate":"2023-08-28"},{"lineNumber":22,"author":{"gitId":"XihuaZ"},"content":"}","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":22}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"XihuaZ"},"content":"todo homework","lastModifiedDate":"2023-08-28"},{"lineNumber":2,"author":{"gitId":"XihuaZ"},"content":"todo assignments","lastModifiedDate":"2023-08-28"},{"lineNumber":3,"author":{"gitId":"XihuaZ"},"content":"event cca /from 5pm /to 7pm","lastModifiedDate":"2023-08-28"},{"lineNumber":4,"author":{"gitId":"XihuaZ"},"content":"event birthday /from 22/7/2023 /to 23/7/2023","lastModifiedDate":"2023-08-28"},{"lineNumber":5,"author":{"gitId":"XihuaZ"},"content":"deadline homework /by tomorrow","lastModifiedDate":"2023-08-28"},{"lineNumber":6,"author":{"gitId":"XihuaZ"},"content":"deadline HM21 /by monday","lastModifiedDate":"2023-08-28"},{"lineNumber":7,"author":{"gitId":"XihuaZ"},"content":"list","lastModifiedDate":"2023-08-28"},{"lineNumber":8,"author":{"gitId":"XihuaZ"},"content":"bye","lastModifiedDate":"2023-08-28"}],"authorContributionMap":{"XihuaZ":8}},{"path":"text-ui-test/runtest.sh","fileType":"sh","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"#!/usr/bin/env bash","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"# create bin directory if it doesn\u0027t exist","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"if [ ! -d \"../bin\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":" mkdir ../bin","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"# delete output from previous run","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"if [ -e \"./ACTUAL.TXT\" ]","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" rm ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"# compile the code into the bin folder, terminates if error occurred","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if ! javac -cp ../src/main/java -Xlint:none -d ../bin ../src/main/java/*.java","lastModifiedDate":"2020-08-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"********** BUILD FAILURE **********\"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"# run the program, feed commands from input.txt file and redirect the output to the ACTUAL.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"XihuaZ"},"content":"java -classpath ../bin Bot \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2023-08-28"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"# convert to UNIX format","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"dos2unix ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"# compare the output to the expected output","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"diff ACTUAL.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":" echo \"Test result: PASSED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" echo \"Test result: FAILED\"","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"XihuaZ":1,"-":37}}] diff --git a/XihuaZ_ip_master/commits.json b/XihuaZ_ip_master/commits.json index 4eeb775c..34a6169e 100644 --- a/XihuaZ_ip_master/commits.json +++ b/XihuaZ_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"XihuaZ":[{"date":"2023-08-26","commitResults":[{"hash":"ffa88fa7399d87c97ce9439db9d125bc37dbfe42","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"c35740189d6b66b9be3d44f61f2e95cf3453a1be","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"ffb0564b3d64b4314426fb44c3e64e6a8d737104","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":3}}}]},{"date":"2023-08-27","commitResults":[{"hash":"f1220161f21a43c86ad4ded62edbd01200a820bf","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":7}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e2fc52674089faebb316bec81d2b8977f53d59d6","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":538,"deletions":118}}},{"hash":"60e335874ceb053fa2cd15a49a105d4d73ab8592","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":3},"sh":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fdd89dcc110532c901ae64e535683e28d4abeca5","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":84}}},{"hash":"087b006c27bf8f317430682ab580080fad156803","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":2}}},{"hash":"13e1f120b55bc297e7a4c7469d239dc63c4cea8d","isMergeCommit":false,"messageTitle":"Cleanup redundant code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":37}}}]},{"date":"2023-09-02","commitResults":[{"hash":"acbd835ff44c420b1b06867c19ac69219a2e7d36","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":218,"deletions":24}}},{"hash":"da68509c63b72eff3a8db5e00f853837bc7c8156","isMergeCommit":false,"messageTitle":"Implemented conversion to LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":44,"deletions":11}}},{"hash":"0b61d3c07195d355177ca4e825b768e087296cc4","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":113,"deletions":86}}}]}]},"authorFileTypeContributionMap":{"XihuaZ":{"java":859,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":10}},"authorContributionVariance":{"XihuaZ":40094.12},"authorDisplayNameMap":{"XihuaZ":"CS2103-T16-1 ZHU ..IHUA"}} +{"authorDailyContributionsMap":{"XihuaZ":[{"date":"2023-08-26","commitResults":[{"hash":"ffa88fa7399d87c97ce9439db9d125bc37dbfe42","isMergeCommit":false,"messageTitle":"Level 0. Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":10}}},{"hash":"c35740189d6b66b9be3d44f61f2e95cf3453a1be","isMergeCommit":false,"messageTitle":"Level 1. Echo","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":14,"deletions":3}}},{"hash":"ffb0564b3d64b4314426fb44c3e64e6a8d737104","isMergeCommit":false,"messageTitle":"Level 2. Add, List","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":45,"deletions":3}}}]},{"date":"2023-08-27","commitResults":[{"hash":"f1220161f21a43c86ad4ded62edbd01200a820bf","isMergeCommit":false,"messageTitle":"Level 3. Mark as Done","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":67,"deletions":7}}}]},{"date":"2023-08-28","commitResults":[{"hash":"e2fc52674089faebb316bec81d2b8977f53d59d6","isMergeCommit":false,"messageTitle":"Level 4. ToDos, Events, Deadlines","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":538,"deletions":118}}},{"hash":"60e335874ceb053fa2cd15a49a105d4d73ab8592","isMergeCommit":false,"messageTitle":"A-TextUiTesting: Automated Text UI Testing","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":8,"deletions":0},"java":{"insertions":3,"deletions":3},"sh":{"insertions":2,"deletions":2}}}]},{"date":"2023-08-29","commitResults":[{"hash":"fdd89dcc110532c901ae64e535683e28d4abeca5","isMergeCommit":false,"messageTitle":"Level 5. Handle Errors","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":131,"deletions":84}}},{"hash":"087b006c27bf8f317430682ab580080fad156803","isMergeCommit":false,"messageTitle":"Level 6. Delete","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":2}}},{"hash":"13e1f120b55bc297e7a4c7469d239dc63c4cea8d","isMergeCommit":false,"messageTitle":"Cleanup redundant code","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":37}}}]},{"date":"2023-09-02","commitResults":[{"hash":"acbd835ff44c420b1b06867c19ac69219a2e7d36","isMergeCommit":false,"messageTitle":"Level 7. Save","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":0,"deletions":0},"java":{"insertions":218,"deletions":24}}},{"hash":"da68509c63b72eff3a8db5e00f853837bc7c8156","isMergeCommit":false,"messageTitle":"Implemented conversion to LocalDateTime","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":44,"deletions":11}}},{"hash":"0b61d3c07195d355177ca4e825b768e087296cc4","isMergeCommit":false,"messageTitle":"Level 8. Dates and Times","messageBody":"","tags":["Level-8"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":113,"deletions":86}}},{"hash":"f285c4f93c65e4e8f3e82f2fbd2db8a8b34f528e","isMergeCommit":false,"messageTitle":"Refactor the code","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":1},"java":{"insertions":18,"deletions":31}}}]},{"date":"2023-09-03","commitResults":[{"hash":"1d476fa64fc92d4d9f82dde8d2a0098888729488","isMergeCommit":false,"messageTitle":"Organize into Packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"txt":{"insertions":2,"deletions":0},"java":{"insertions":150,"deletions":126}}}]}]},"authorFileTypeContributionMap":{"XihuaZ":{"java":870,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":0,"txt":13}},"authorContributionVariance":{"XihuaZ":41948.496},"authorDisplayNameMap":{"XihuaZ":"CS2103-T16-1 ZHU ..IHUA"}} diff --git a/alyssaongyx_ip_master/authorship.json b/alyssaongyx_ip_master/authorship.json index 056293c4..72d217fa 100644 --- a/alyssaongyx_ip_master/authorship.json +++ b/alyssaongyx_ip_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" archiveBaseName \u003d \"Ally\"","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"alyssaongyx":1,"-":41}},{"path":"data/saved.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"T | 0 | return bookT | 0 | return bookT | 0 | return bookT | 0 | return book","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":1}},{"path":"src/main/java/Ally/Ally.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Commands.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class Ally {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private Storage storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private AllyList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" private Ui ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public Ally(String filePath) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" tasks \u003d new AllyList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" ui.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" Commands c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" c.run(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" ui.showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" public static void main(String[] args) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":" new Ally(\"./data/saved.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":47}},{"path":"src/main/java/Ally/Commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class AddDeadlineCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private String by;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public AddDeadlineCommand(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" Deadline ddline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" allyList.addElements(ddline);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(ddline);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" allyList.printNewList(ddline);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":32}},{"path":"src/main/java/Ally/Commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class AddEventCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private String from;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" private String to;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public AddEventCommand(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" allyList.addElements(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" allyList.printNewList(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":35}},{"path":"src/main/java/Ally/Commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class AddTodoCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" private final String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" allyList.addElements(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" allyList.printNewList(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":29}},{"path":"src/main/java/Ally/Commands/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public abstract class Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" public abstract void run (AllyList allyList, Ui ui, Storage storage) throws AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":10}},{"path":"src/main/java/Ally/Commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class DeleteCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + allyList.getTask(index));","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" allyList.deleteElement(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Now you have \" + allyList.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":33}},{"path":"src/main/java/Ally/Commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class ExitCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" ui.bye();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":23}},{"path":"src/main/java/Ally/Commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class ListCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" ui.showList(allyList);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":19}},{"path":"src/main/java/Ally/Commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class MarkCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" Task task \u003d allyList.getTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" allyList.markAsDone(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" ui.showMarked(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":31}},{"path":"src/main/java/Ally/Commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class UnmarkCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private int index;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" Task task \u003d allyList.getTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" allyList.unMarkDone(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" ui.showNotMarked(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":31}},{"path":"src/main/java/Ally/Exceptions/AllyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"public class AllyException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":" public AllyException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":7}},{"path":"src/main/java/Ally/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Commands.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" public static Commands parse(String ipt) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" String[] split \u003d ipt.split(\" \", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" if (split[0].equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" return new AddTodoCommand(split[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" String[] splits1 \u003d split[1].split(\" /\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" return new AddDeadlineCommand(splits1[0], splits1[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" String[] splits2 \u003d split[1].split(\" /\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" return new AddEventCommand(splits2[0], splits2[1], splits2[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" return new MarkCommand(Integer.parseInt(split[1]) - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" return new UnmarkCommand(Integer.parseInt(split[1]) - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" return new DeleteCommand(Integer.parseInt(split[1]) - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":32}},{"path":"src/main/java/Ally/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" private String filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" public Storage(String filePath) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" load();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Unable to load\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" public ArrayList\u003cTask\u003e load() throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" ArrayList\u003cTask\u003e loadTasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" createFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" while(s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" loadTasks.add(readData(line));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" s.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" this.createFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Not able to scan!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" return loadTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":" public Task readData(String data) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":" String[] splits \u003d data.split(\" | \");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":" Task savedTasks \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"alyssaongyx"},"content":" if (splits[0].equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"alyssaongyx"},"content":" savedTasks \u003d new Todo(splits[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"alyssaongyx"},"content":" } else if (splits[0].equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"alyssaongyx"},"content":" savedTasks \u003d new Deadline(splits[2], splits[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"alyssaongyx"},"content":" } else if (splits[0].equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"alyssaongyx"},"content":" savedTasks \u003d new Event(splits[2], splits[3], splits[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"alyssaongyx"},"content":" if (splits[1].equals(\"1\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"alyssaongyx"},"content":" savedTasks.setMarked();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"alyssaongyx"},"content":" return savedTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"alyssaongyx"},"content":" public void appendToFile(Task task) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"alyssaongyx"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"alyssaongyx"},"content":" fw.write(task.formatFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"alyssaongyx"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"alyssaongyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Can\u0027t write your file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"alyssaongyx"},"content":" public void createFile() throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"alyssaongyx"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"alyssaongyx"},"content":" File dir \u003d new File(f.getParent());","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"alyssaongyx"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"alyssaongyx"},"content":" dir.mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"alyssaongyx"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"alyssaongyx"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"alyssaongyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Ohnos, you can\u0027t create the file :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":86}},{"path":"src/main/java/Ally/Tasks/AllyList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class AllyList {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" ArrayList\u003cTask\u003e arr;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" public AllyList(ArrayList\u003cTask\u003e tasks) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" arr \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" * Function to add tasks from the input into the arraylist.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" public void addElements(Task task) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" arr.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" * Function to mark the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" * @param index","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" public void markAsDone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" Task task \u003d arr.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" task.setMarked();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" * Function to unmark the task to undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" * @param index","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" public void unMarkDone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" Task task \u003d arr.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" task.notDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":" return arr.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"alyssaongyx"},"content":" return arr.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"alyssaongyx"},"content":" * Prints the task added to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"alyssaongyx"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"alyssaongyx"},"content":" public void printNewList(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Now you have \" + arr.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"alyssaongyx"},"content":" * Function to delete a task from the list or array.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"alyssaongyx"},"content":" * @param index","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"alyssaongyx"},"content":" * @throws AllyException","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"alyssaongyx"},"content":" public void deleteElement(int index) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"alyssaongyx"},"content":" arr.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":72}},{"path":"src/main/java/Ally/Tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" protected LocalDateTime byDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" * Constructor for Ally.Tasks.Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" * @param by","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"\u0027by \u0027yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" byDateTime \u003d LocalDateTime.parse(by, inputFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" * Formats the tasks for the saved.txt","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" * @return String","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" public String formatFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" return \"D\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" \"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" + byDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\u0027T\u0027HH:mm:ss\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" * Overrides the toString() method in Ally.Tasks.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" * @return the string","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" + byDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":41}},{"path":"src/main/java/Ally/Tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" * Constructor for Ally.Tasks.Event.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" * @param from","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" * @param to","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" public String formatFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" return \"E\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" + from + \" | \" + to;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" * Overrides the toString() method in Ally.Tasks.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" * @return the string","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":34}},{"path":"src/main/java/Ally/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" * Constructor for Ally.Tasks.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" public void setMarked() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" public void notDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" public String formatFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" return \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":35}},{"path":"src/main/java/Ally/Tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":" * Constructor for todo.","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" public String formatFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" return \"T\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" * Overrides the toString() method in Ally.Tasks.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" * @return the string","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":25}},{"path":"src/main/java/Ally/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" private static final String greeting \u003d \"Hello! I\u0027m ALLY\\nWhat can I do for you?\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" private static final String bye \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" Scanner ipt \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" return this.ipt.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" public static void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" * Function that provides the starting message and greeting.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" * Function that provides the bye message when the user","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" * ends the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" public void bye() throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" public void showList(AllyList allyList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":" for (int i \u003d 0, len \u003d allyList.getSize(); i \u003c len; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":" System.out.println((i + 1) +\". \" + allyList.getTask(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"alyssaongyx"},"content":" public void showDelete(Task task, int total) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Now you have \" + total + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"alyssaongyx"},"content":" public void showMarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"alyssaongyx"},"content":" task.setMarked();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"alyssaongyx"},"content":" public void showNotMarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"alyssaongyx"},"content":" task.notDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"alyssaongyx"},"content":" public void showLoadingError() throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Unable to load!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"alyssaongyx"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":77}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":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":"-"},"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":"alyssaongyx"},"content":"java -classpath ../bin Ally \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":{"alyssaongyx":1,"-":37}}] +[{"path":"build.gradle","fileType":"gradle","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2020-05-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"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":"alyssaongyx"},"content":" mainClass.set(\"Ally.Ally\")","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" archiveFileName \u003d \u0027ally.jar\u0027","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" archiveBaseName \u003d \"ally\"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier \u003d null","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" dependsOn(\"distZip\", \"distTar\")","lastModifiedDate":"2023-08-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"alyssaongyx":3,"-":40}},{"path":"data/saved.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"T | 0 | return bookT | 0 | return bookT | 0 | return bookT | 0 | return book","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":1}},{"path":"src/main/java/Ally/Ally.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Commands.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class Ally {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private final Storage storage;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private AllyList tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" private final Ui ui;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public Ally(String filePath) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" tasks \u003d new AllyList(storage.load());","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" ui.showLoadingError();","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" public void run() {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" ui.start();","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" while (!isExit) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" String fullCommand \u003d ui.readCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" Ui.showLine(); // show the divider line (\"_______\")","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" Commands c \u003d Parser.parse(fullCommand);","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" c.run(tasks, ui, storage);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" isExit \u003d c.isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" ui.showError(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" } finally {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" Ui.showLine();","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" public static void main(String[] args) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":" new Ally(\"./data/saved.txt\").run();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":47}},{"path":"src/main/java/Ally/Commands/AddDeadlineCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class AddDeadlineCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private final String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private final String by;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public AddDeadlineCommand(String description, String by) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" this.by \u003d by;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" Deadline ddline \u003d new Deadline(description, by);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" allyList.addElements(ddline);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(ddline);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" allyList.printNewList(ddline);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":32}},{"path":"src/main/java/Ally/Commands/AddEventCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class AddEventCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private final String description;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private final String from;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" private final String to;","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public AddEventCommand(String description, String from, String to) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" Event event \u003d new Event(description, from, to);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" allyList.addElements(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" allyList.printNewList(event);","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":35}},{"path":"src/main/java/Ally/Commands/AddTodoCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class AddTodoCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" private final String description;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" public AddTodoCommand(String description) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" Todo todo \u003d new Todo(description);","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" allyList.addElements(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" allyList.printNewList(todo);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":29}},{"path":"src/main/java/Ally/Commands/Commands.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public abstract class Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" public abstract void run (AllyList allyList, Ui ui, Storage storage) throws AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" public abstract boolean isExit();","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":10}},{"path":"src/main/java/Ally/Commands/DeleteCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class DeleteCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private final int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public DeleteCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + allyList.getTask(index));","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" allyList.deleteElement(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Now you have \" + allyList.getSize() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":33}},{"path":"src/main/java/Ally/Commands/ExitCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class ExitCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" ui.bye();","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" return true;","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":23}},{"path":"src/main/java/Ally/Commands/ListCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Storage;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Ui;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class ListCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" ui.showList(allyList);","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":19}},{"path":"src/main/java/Ally/Commands/MarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class MarkCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private final int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public MarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" Task task \u003d allyList.getTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" allyList.markAsDone(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" ui.showMarked(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":31}},{"path":"src/main/java/Ally/Commands/UnmarkCommand.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Commands;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"public class UnmarkCommand extends Commands {","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" private final int index;","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public UnmarkCommand(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.index \u003d index;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" public void run(AllyList allyList, Ui ui, Storage storage) {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" Task task \u003d allyList.getTask(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" allyList.unMarkDone(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" ui.showNotMarked(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" storage.appendToFile(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" public boolean isExit() {","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" return false;","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":31}},{"path":"src/main/java/Ally/Exceptions/AllyException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Exceptions;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"public class AllyException extends Exception {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":" public AllyException(String message) {","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":" super(message);","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":7}},{"path":"src/main/java/Ally/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Commands.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"public class Parser {","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" public static Commands parse(String ipt) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" String[] split \u003d ipt.split(\" \", 2);","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" if (split[0].equals(\"bye\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" return new ExitCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"list\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" return new ListCommand();","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"todo\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" return new AddTodoCommand(split[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"deadline\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" String[] splits1 \u003d split[1].split(\" /\");","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" return new AddDeadlineCommand(splits1[0], splits1[1]);","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"event\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" String[] splits2 \u003d split[1].split(\" /\");","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" return new AddEventCommand(splits2[0], splits2[1], splits2[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"mark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" return new MarkCommand(Integer.parseInt(split[1]) - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"unmark\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" return new UnmarkCommand(Integer.parseInt(split[1]) - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" } else if (split[0].equals(\"delete\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" return new DeleteCommand(Integer.parseInt(split[1]) - 1);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" } else {","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"☹ OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":32}},{"path":"src/main/java/Ally/Storage.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"import java.io.File;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"import java.io.IOException;","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":"public class Storage {","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" private final String filePath;","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" public Storage(String filePath) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" load();","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" } catch (AllyException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Unable to load\");","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" public ArrayList\u003cTask\u003e load() throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" ArrayList\u003cTask\u003e loadTasks \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" createFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" while(s.hasNext()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" String line \u003d s.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" loadTasks.add(readData(line));","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" s.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" this.createFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Not able to scan!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" return loadTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":" public Task readData(String data) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":" String[] splits \u003d data.split(\" | \");","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":" Task savedTasks \u003d null;","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"alyssaongyx"},"content":" if (splits[0].equals(\"T\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"alyssaongyx"},"content":" savedTasks \u003d new Todo(splits[2]);","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"alyssaongyx"},"content":" } else if (splits[0].equals(\"D\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"alyssaongyx"},"content":" savedTasks \u003d new Deadline(splits[2], splits[3]);","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"alyssaongyx"},"content":" } else if (splits[0].equals(\"E\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"alyssaongyx"},"content":" savedTasks \u003d new Event(splits[2], splits[3], splits[4]);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"alyssaongyx"},"content":" if (splits[1].equals(\"1\")) {","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"alyssaongyx"},"content":" savedTasks.setMarked();","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"alyssaongyx"},"content":" return savedTasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"alyssaongyx"},"content":" public void appendToFile(Task task) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"alyssaongyx"},"content":" FileWriter fw \u003d new FileWriter(filePath, true);","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"alyssaongyx"},"content":" fw.write(task.formatFile());","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"alyssaongyx"},"content":" fw.close();","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"alyssaongyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Can\u0027t write your file\");","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"alyssaongyx"},"content":" public void createFile() throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"alyssaongyx"},"content":" File f \u003d new File(filePath);","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"alyssaongyx"},"content":" File dir \u003d new File(f.getParent());","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"alyssaongyx"},"content":" if (!dir.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"alyssaongyx"},"content":" dir.mkdir();","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":78,"author":{"gitId":"alyssaongyx"},"content":" try {","lastModifiedDate":"2023-09-02"},{"lineNumber":79,"author":{"gitId":"alyssaongyx"},"content":" if (!f.exists()) {","lastModifiedDate":"2023-09-02"},{"lineNumber":80,"author":{"gitId":"alyssaongyx"},"content":" f.createNewFile();","lastModifiedDate":"2023-09-02"},{"lineNumber":81,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"alyssaongyx"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Ohnos, you can\u0027t create the file :-(\");","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":86}},{"path":"src/main/java/Ally/Tasks/AllyList.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class AllyList {","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" ArrayList\u003cTask\u003e arr;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" public AllyList(ArrayList\u003cTask\u003e tasks) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" arr \u003d new ArrayList\u003c\u003e(100);","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" * Function to add tasks from the input into the arraylist.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" public void addElements(Task task) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" arr.add(task);","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" * Function to mark the task as done.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" * @param index","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" public void markAsDone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" Task task \u003d arr.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" task.setMarked();","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task);","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" * Function to unmark the task to undone.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" * @param index","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" public void unMarkDone(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" Task task \u003d arr.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" task.notDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":" public int getSize() {","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":" return arr.size();","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":" public Task getTask(int index) {","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"alyssaongyx"},"content":" return arr.get(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"alyssaongyx"},"content":" * Prints the task added to the list.","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"alyssaongyx"},"content":" * @param task","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"alyssaongyx"},"content":" public void printNewList(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Got it. I\u0027ve added this task:\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task.toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Now you have \" + arr.size() + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"alyssaongyx"},"content":" * Function to delete a task from the list or array.","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"alyssaongyx"},"content":" * @param index","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"alyssaongyx"},"content":" * @throws AllyException","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"alyssaongyx"},"content":" public void deleteElement(int index) throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"alyssaongyx"},"content":" arr.remove(index);","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":72}},{"path":"src/main/java/Ally/Tasks/Deadline.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"public class Deadline extends Task {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" protected LocalDateTime byDateTime;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" * Constructor for Ally.Tasks.Deadline.","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" * @param by","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public Deadline(String description, String by) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" DateTimeFormatter inputFormatter \u003d DateTimeFormatter.ofPattern(\"\u0027by \u0027yyyy-MM-dd HHmm\");","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" byDateTime \u003d LocalDateTime.parse(by, inputFormatter);","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" * Formats the tasks for the saved.txt","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" * @return String","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" public String formatFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" return \"D\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" \"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" + byDateTime.format(DateTimeFormatter.ofPattern(\"yyyy-MM-dd\u0027T\u0027HH:mm:ss\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" * Overrides the toString() method in Ally.Tasks.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" * @return the string","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" return \"[D]\" + super.toString() + \" (by: \"","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" + byDateTime.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy ha\")) + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":41}},{"path":"src/main/java/Ally/Tasks/Event.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"public class Event extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":" protected String from;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":" protected String to;","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" * Constructor for Ally.Tasks.Event.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" * @param from","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" * @param to","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" public Event(String description, String from, String to) {","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" this.from \u003d from;","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" this.to \u003d to;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" public String formatFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" return \"E\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description + \" | \"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" + from + \" | \" + to;","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" * Overrides the toString() method in Ally.Tasks.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" * @return the string","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" return \"[E]\" + super.toString() + \" (from: \" + from + \" to: \" + to + \")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":34}},{"path":"src/main/java/Ally/Tasks/Task.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"public class Task {","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":" protected String description;","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":" protected boolean isDone;","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" * Constructor for Ally.Tasks.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" public Task(String description) {","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" this.description \u003d description;","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" public String getStatusIcon() {","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" return (isDone ? \"X\" : \" \"); // mark done task with X","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" return \"[\" + getStatusIcon() + \"] \" + this.description;","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" public void setMarked() {","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" public void notDone() {","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" public String formatFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" return \" \";","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":35}},{"path":"src/main/java/Ally/Tasks/Todo.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"public class Todo extends Task {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":" * Constructor for todo.","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":" * @param description","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" public Todo(String description) {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" super(description);","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" public String formatFile() {","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" return \"T\" + \" | \" + (isDone ? \"1\" : \"0\") + \" | \" + description;","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" * Overrides the toString() method in Ally.Tasks.Task.","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" * @return the string","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" @Override","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" public String toString() {","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":25}},{"path":"src/main/java/Ally/Ui.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally;","lastModifiedDate":"2023-09-02"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Exceptions.AllyException;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.AllyList;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import Ally.Tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":"public class Ui {","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" private static final String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-09-02"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" private static final String greeting \u003d \"Hello! I\u0027m ALLY\\nWhat can I do for you?\\n\";","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" private static final String bye \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" Scanner ipt \u003d new Scanner(System.in);","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" public String readCommand() {","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" return this.ipt.nextLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" public static void showLine() {","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" * Function that provides the starting message and greeting.","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" public void start() {","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(greeting);","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" * Function that provides the bye message when the user","lastModifiedDate":"2023-09-02"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" * ends the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" public void bye() throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(bye);","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(line);","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" public void showList(AllyList allyList) {","lastModifiedDate":"2023-09-02"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Here are the tasks in your list:\\n\");","lastModifiedDate":"2023-09-02"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":" for (int i \u003d 0, len \u003d allyList.getSize(); i \u003c len; i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":" System.out.println((i + 1) +\". \" + allyList.getTask(i).toString());","lastModifiedDate":"2023-09-02"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":48,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"alyssaongyx"},"content":" public void showDelete(Task task, int total) {","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Noted. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task);","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Now you have \" + total + \" tasks in the list.\");","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"alyssaongyx"},"content":" showLine();","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"alyssaongyx"},"content":" public void showMarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":59,"author":{"gitId":"alyssaongyx"},"content":" task.setMarked();","lastModifiedDate":"2023-09-02"},{"lineNumber":60,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"Nice! I\u0027ve marked this task as done:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":61,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task);","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"alyssaongyx"},"content":" public void showNotMarked(Task task) {","lastModifiedDate":"2023-09-02"},{"lineNumber":65,"author":{"gitId":"alyssaongyx"},"content":" task.notDone();","lastModifiedDate":"2023-09-02"},{"lineNumber":66,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"OK, I\u0027ve marked this task as not done yet:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(\"\\t\" + task);","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"alyssaongyx"},"content":" public void showLoadingError() throws AllyException {","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"alyssaongyx"},"content":" throw new AllyException(\"Unable to load!\");","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"alyssaongyx"},"content":" public void showError(String message) {","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"alyssaongyx"},"content":" System.out.println(message);","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"alyssaongyx":77}},{"path":"src/test/java/Ally/Tasks/DeadlineTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class DeadlineTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" public void getStatusIcon_markAsDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" Deadline deadline \u003d new Deadline(\"Sleep\", \"by 2020-02-02 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" deadline.setMarked();","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(\"X\", deadline.getStatusIcon());","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" public void getStatusIcon_markAsNotDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" Deadline deadline \u003d new Deadline(\"Sleep\", \"by 2020-02-02 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" deadline.notDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(\" \", deadline.getStatusIcon());","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" public void markAsDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" Deadline deadline \u003d new Deadline(\"Sleep\", \"by 2020-02-02 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" deadline.setMarked();","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" assertTrue(deadline.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" public void markAsNotDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" Deadline deadline \u003d new Deadline(\"Sleep\", \"by 2020-02-02 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" deadline.notDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" assertFalse(deadline.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" public void formatFile_markAsUndone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" Deadline deadline \u003d new Deadline(\"Sleep\", \"by 2020-02-02 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":" deadline.notDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" String expected \u003d \"D | 0 | Sleep 2020-02-02T18:00:00\";","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(expected, deadline.formatFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":" public void formatFile_markAsDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":" Deadline deadline \u003d new Deadline(\"Sleep\", \"by 2020-02-02 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"alyssaongyx"},"content":" deadline.setMarked();","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"alyssaongyx"},"content":" String expected \u003d \"D | 1 | Sleep 2020-02-02T18:00:00\";","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(expected, deadline.formatFile());","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":53,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":54,"author":{"gitId":"alyssaongyx"},"content":" public void toString_markAsUndone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":55,"author":{"gitId":"alyssaongyx"},"content":" Deadline deadline \u003d new Deadline(\"Sleep\", \"by 2020-02-02 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":56,"author":{"gitId":"alyssaongyx"},"content":" deadline.notDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":57,"author":{"gitId":"alyssaongyx"},"content":" String expected \u003d \"[D][ ] Sleep (by: Feb 02 2020 6pm)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":58,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":60,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":61,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":62,"author":{"gitId":"alyssaongyx"},"content":" public void toString_markAsDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":63,"author":{"gitId":"alyssaongyx"},"content":" Deadline deadline \u003d new Deadline(\"Sleep\", \"by 2020-02-02 1800\");","lastModifiedDate":"2023-09-03"},{"lineNumber":64,"author":{"gitId":"alyssaongyx"},"content":" deadline.setMarked();","lastModifiedDate":"2023-09-03"},{"lineNumber":65,"author":{"gitId":"alyssaongyx"},"content":" String expected \u003d \"[D][X] Sleep (by: Feb 02 2020 6pm)\";","lastModifiedDate":"2023-09-03"},{"lineNumber":66,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(expected, deadline.toString());","lastModifiedDate":"2023-09-03"},{"lineNumber":67,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":68,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"alyssaongyx":68}},{"path":"src/test/java/Ally/Tasks/TodoTest.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"package Ally.Tasks;//same package as the class being tested","lastModifiedDate":"2023-09-03"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-09-03"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-09-03"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":7,"author":{"gitId":"alyssaongyx"},"content":"public class TodoTest {","lastModifiedDate":"2023-09-03"},{"lineNumber":8,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":9,"author":{"gitId":"alyssaongyx"},"content":" public void getStatusIcon_markAsDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":10,"author":{"gitId":"alyssaongyx"},"content":" Todo todo \u003d new Todo(\"Test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":11,"author":{"gitId":"alyssaongyx"},"content":" todo.setMarked();","lastModifiedDate":"2023-09-03"},{"lineNumber":12,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(\"X\", todo.getStatusIcon());","lastModifiedDate":"2023-09-03"},{"lineNumber":13,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":14,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":15,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":16,"author":{"gitId":"alyssaongyx"},"content":" public void getStatusIcon_markAsNotDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":17,"author":{"gitId":"alyssaongyx"},"content":" Todo todo \u003d new Todo(\"Test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":18,"author":{"gitId":"alyssaongyx"},"content":" todo.notDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":19,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(\" \", todo.getStatusIcon());","lastModifiedDate":"2023-09-03"},{"lineNumber":20,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":21,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":22,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":23,"author":{"gitId":"alyssaongyx"},"content":" public void markAsDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":24,"author":{"gitId":"alyssaongyx"},"content":" Todo todo \u003d new Todo(\"Test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":25,"author":{"gitId":"alyssaongyx"},"content":" todo.setMarked();","lastModifiedDate":"2023-09-03"},{"lineNumber":26,"author":{"gitId":"alyssaongyx"},"content":" assertTrue(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":28,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":29,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":30,"author":{"gitId":"alyssaongyx"},"content":" public void markAsNotDone_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":31,"author":{"gitId":"alyssaongyx"},"content":" Todo todo \u003d new Todo(\"Test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":32,"author":{"gitId":"alyssaongyx"},"content":" todo.notDone();","lastModifiedDate":"2023-09-03"},{"lineNumber":33,"author":{"gitId":"alyssaongyx"},"content":" assertFalse(todo.isDone);","lastModifiedDate":"2023-09-03"},{"lineNumber":34,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":35,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":36,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":37,"author":{"gitId":"alyssaongyx"},"content":" public void fileFormat_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":38,"author":{"gitId":"alyssaongyx"},"content":" Todo todo \u003d new Todo(\"Test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"alyssaongyx"},"content":" String format \u003d todo.formatFile();","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(\"T | 0 | Test\", format);","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"alyssaongyx"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"alyssaongyx"},"content":" @Test","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"alyssaongyx"},"content":" public void toString_success(){","lastModifiedDate":"2023-09-03"},{"lineNumber":45,"author":{"gitId":"alyssaongyx"},"content":" Todo todo \u003d new Todo(\"Test\");","lastModifiedDate":"2023-09-03"},{"lineNumber":46,"author":{"gitId":"alyssaongyx"},"content":" String format \u003d todo.toString();","lastModifiedDate":"2023-09-03"},{"lineNumber":47,"author":{"gitId":"alyssaongyx"},"content":" assertEquals(\"[T][ ] Test\", format);","lastModifiedDate":"2023-09-03"},{"lineNumber":48,"author":{"gitId":"alyssaongyx"},"content":" }","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"alyssaongyx"},"content":"}","lastModifiedDate":"2023-09-03"}],"authorContributionMap":{"alyssaongyx":49}},{"path":"text-ui-test/input.txt","fileType":"txt","lines":[{"lineNumber":1,"author":{"gitId":"alyssaongyx"},"content":"todo borrow book","lastModifiedDate":"2023-08-23"},{"lineNumber":2,"author":{"gitId":"alyssaongyx"},"content":"deadline return book /by Sunday","lastModifiedDate":"2023-08-23"},{"lineNumber":3,"author":{"gitId":"alyssaongyx"},"content":"event project meeting /from Mon 2pm /to 4pm","lastModifiedDate":"2023-08-23"},{"lineNumber":4,"author":{"gitId":"alyssaongyx"},"content":"mark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":5,"author":{"gitId":"alyssaongyx"},"content":"unmark 1","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"alyssaongyx"},"content":"bye","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"alyssaongyx":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":"-"},"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":"alyssaongyx"},"content":"java -classpath ../bin Ally \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":{"alyssaongyx":1,"-":37}}] diff --git a/alyssaongyx_ip_master/commits.json b/alyssaongyx_ip_master/commits.json index f92e1f5e..46f1d734 100644 --- a/alyssaongyx_ip_master/commits.json +++ b/alyssaongyx_ip_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"alyssaongyx":[{"date":"2023-08-23","commitResults":[{"hash":"c42497f2d88692fa470d0b04ec7f0bbade9cec33","isMergeCommit":false,"messageTitle":"Increment to Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":10}}},{"hash":"eb43445f23690f14c016dbdf2b21788c43aa9160","isMergeCommit":false,"messageTitle":"Increment to Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"bac18bc0a90cd7987b1da4e5c8c0b8c5b7cb57bf","isMergeCommit":false,"messageTitle":"Increment to Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"9b94382cdba17549eb97fdb3aca8ff08eb042581","isMergeCommit":false,"messageTitle":"New update","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"f64f12e5bb18b344926d191e6a6b395de600a031","isMergeCommit":false,"messageTitle":"Updated","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":23}}},{"hash":"531bc3e99f96793562b8fca6ff9b18b687fa9f48","isMergeCommit":false,"messageTitle":"Increment to Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":7}}},{"hash":"87e0717fc58f0a28c5faa08ea5e405451a8e3981","isMergeCommit":false,"messageTitle":"Increment to Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":8}}},{"hash":"f4fd8a70fdadddbf571d8b29b31bce0fe83416fc","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":6}}},{"hash":"ca66bf06d7589ddbce4b8f0ff808076ac910c576","isMergeCommit":false,"messageTitle":"A-TextUiTesting initial commit","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"66abb301858c399f5abc08ec5e4a5ec349aa7864","isMergeCommit":false,"messageTitle":"Increment to Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"d5e63a2dccb9ce5381b10b3076be939412851376","isMergeCommit":false,"messageTitle":"Increment to Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"af7b164e1627ae01025b293af59a3a7fe2118753","isMergeCommit":false,"messageTitle":"Updated the print statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"8236e766b750d93ab33141d9656a8172ec774aba","isMergeCommit":false,"messageTitle":"Added comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":15}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6be4aa8f2c9ac11e6e6d1f1ccb5d29354a11a704","isMergeCommit":false,"messageTitle":"level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"515406cd915e5082fac5a164008565eda2632844","isMergeCommit":false,"messageTitle":"Update Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":106,"deletions":80}}},{"hash":"26f9f3b9760c3ced701f909027071186e25ccdf1","isMergeCommit":false,"messageTitle":"Update deadline file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}}]},{"date":"2023-09-02","commitResults":[{"hash":"37d41952016913da502963f13fd5163670d7643f","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":546,"deletions":319}}},{"hash":"e5a483fef0c184943c8ac4f7a3e106b558397208","isMergeCommit":false,"messageTitle":"Create new packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":25}}},{"hash":"e646669594d43880515d73ad542740c92e3b832c","isMergeCommit":false,"messageTitle":"Stage saved.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"0e6e4a602ed290d03dfb9c6205cc8be710ffde87","isMergeCommit":false,"messageTitle":"added javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"a0294ff7f8354bf2a1879dbd9df86f73a7fac9ec","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":"82f9b840ddb03bd2ac330b8f512e2cafe50cadf7","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1e16048cbbe4b4dfc1f34982a994e91bdef331b2","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"alyssaongyx":{"java":699,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":1,"txt":7}},"authorContributionVariance":{"alyssaongyx":56417.11},"authorDisplayNameMap":{"alyssaongyx":"CS2103T-W10-2 ALYS..XIAN"}} +{"authorDailyContributionsMap":{"alyssaongyx":[{"date":"2023-08-23","commitResults":[{"hash":"c42497f2d88692fa470d0b04ec7f0bbade9cec33","isMergeCommit":false,"messageTitle":"Increment to Level-0: Rename, Greet, Exit","messageBody":"","tags":["Level-0"],"fileTypesAndContributionMap":{"java":{"insertions":21,"deletions":10}}},{"hash":"eb43445f23690f14c016dbdf2b21788c43aa9160","isMergeCommit":false,"messageTitle":"Increment to Level-0","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":7,"deletions":5}}},{"hash":"bac18bc0a90cd7987b1da4e5c8c0b8c5b7cb57bf","isMergeCommit":false,"messageTitle":"Increment to Level-1","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":33,"deletions":0}}},{"hash":"9b94382cdba17549eb97fdb3aca8ff08eb042581","isMergeCommit":false,"messageTitle":"New update","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":2,"deletions":0}}},{"hash":"f64f12e5bb18b344926d191e6a6b395de600a031","isMergeCommit":false,"messageTitle":"Updated","messageBody":"","tags":["Level-1"],"fileTypesAndContributionMap":{"java":{"insertions":10,"deletions":23}}},{"hash":"531bc3e99f96793562b8fca6ff9b18b687fa9f48","isMergeCommit":false,"messageTitle":"Increment to Level 2","messageBody":"","tags":["Level-2"],"fileTypesAndContributionMap":{"java":{"insertions":29,"deletions":7}}},{"hash":"87e0717fc58f0a28c5faa08ea5e405451a8e3981","isMergeCommit":false,"messageTitle":"Increment to Level 3","messageBody":"","tags":["Level-3"],"fileTypesAndContributionMap":{"java":{"insertions":62,"deletions":8}}},{"hash":"f4fd8a70fdadddbf571d8b29b31bce0fe83416fc","isMergeCommit":false,"messageTitle":"Level 4","messageBody":"","tags":["Level-4"],"fileTypesAndContributionMap":{"java":{"insertions":48,"deletions":6}}},{"hash":"ca66bf06d7589ddbce4b8f0ff808076ac910c576","isMergeCommit":false,"messageTitle":"A-TextUiTesting initial commit","messageBody":"","tags":["A-TextUiTesting"],"fileTypesAndContributionMap":{"txt":{"insertions":6,"deletions":0},"sh":{"insertions":1,"deletions":1}}},{"hash":"66abb301858c399f5abc08ec5e4a5ec349aa7864","isMergeCommit":false,"messageTitle":"Increment to Level-5","messageBody":"","tags":["Level-5"],"fileTypesAndContributionMap":{"java":{"insertions":26,"deletions":7}}},{"hash":"d5e63a2dccb9ce5381b10b3076be939412851376","isMergeCommit":false,"messageTitle":"Increment to Level-6","messageBody":"","tags":["Level-6"],"fileTypesAndContributionMap":{"java":{"insertions":16,"deletions":0}}},{"hash":"af7b164e1627ae01025b293af59a3a7fe2118753","isMergeCommit":false,"messageTitle":"Updated the print statements","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":3,"deletions":3}}}]},{"date":"2023-08-24","commitResults":[{"hash":"8236e766b750d93ab33141d9656a8172ec774aba","isMergeCommit":false,"messageTitle":"Added comments","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":148,"deletions":15}}}]},{"date":"2023-08-30","commitResults":[{"hash":"6be4aa8f2c9ac11e6e6d1f1ccb5d29354a11a704","isMergeCommit":false,"messageTitle":"level-7","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":79,"deletions":1}}}]},{"date":"2023-09-01","commitResults":[{"hash":"515406cd915e5082fac5a164008565eda2632844","isMergeCommit":false,"messageTitle":"Update Level-7","messageBody":"","tags":["Level-7"],"fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":0},"java":{"insertions":106,"deletions":80}}},{"hash":"26f9f3b9760c3ced701f909027071186e25ccdf1","isMergeCommit":false,"messageTitle":"Update deadline file","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":11,"deletions":4}}}]},{"date":"2023-09-02","commitResults":[{"hash":"37d41952016913da502963f13fd5163670d7643f","isMergeCommit":false,"messageTitle":"More OOP","messageBody":"","tags":["A-MoreOOP"],"fileTypesAndContributionMap":{"java":{"insertions":546,"deletions":319}}},{"hash":"e5a483fef0c184943c8ac4f7a3e106b558397208","isMergeCommit":false,"messageTitle":"Create new packages","messageBody":"","tags":["A-Packages"],"fileTypesAndContributionMap":{"java":{"insertions":51,"deletions":25}}},{"hash":"e646669594d43880515d73ad542740c92e3b832c","isMergeCommit":false,"messageTitle":"Stage saved.txt","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}},{"hash":"0e6e4a602ed290d03dfb9c6205cc8be710ffde87","isMergeCommit":false,"messageTitle":"added javadocs","messageBody":"","fileTypesAndContributionMap":{"java":{"insertions":4,"deletions":0}}},{"hash":"a0294ff7f8354bf2a1879dbd9df86f73a7fac9ec","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":"82f9b840ddb03bd2ac330b8f512e2cafe50cadf7","isMergeCommit":false,"messageTitle":"Set up gradle","messageBody":"","tags":["A-Gradle"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1}}},{"hash":"1e16048cbbe4b4dfc1f34982a994e91bdef331b2","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"txt":{"insertions":1,"deletions":1}}}]},{"date":"2023-09-03","commitResults":[{"hash":"991960f30fc7c4fb941e28b68f2a3d76555fc54c","isMergeCommit":false,"messageTitle":"Created JUnit Tests","messageBody":"","tags":["A-JUnit"],"fileTypesAndContributionMap":{"gradle":{"insertions":1,"deletions":1},"java":{"insertions":134,"deletions":17}}},{"hash":"00629ad504fc36d8f9577ba9b9a54d6a097300b0","isMergeCommit":false,"messageTitle":"Updated build gradle to generate Jar file","messageBody":"","tags":["A-Jar"],"fileTypesAndContributionMap":{"gradle":{"insertions":2,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"alyssaongyx":{"java":816,"md":0,"fxml":0,"sh":1,"bat":0,"gradle":3,"txt":7}},"authorContributionVariance":{"alyssaongyx":53225.348},"authorDisplayNameMap":{"alyssaongyx":"CS2103T-W10-2 ALYS..XIAN"}} diff --git a/antonTan96_ip_master/authorship.json b/antonTan96_ip_master/authorship.json index 37bc2e11..f37d2ff6 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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" mainClass.set(\"crackerpackage.Cracker\")","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"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":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"antonTan96":5,"-":41}},{"path":"src/main/java/Exceptions/EmptyDescriptionException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package Exceptions;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"public class EmptyDescriptionException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":" return \"Description cannot be empty\";","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":7}},{"path":"src/main/java/Exceptions/IllegalFormatException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package Exceptions;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"public class IllegalFormatException extends Exception{","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":" String msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":" public IllegalFormatException(String s){","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" msg \u003d s;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" return msg;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":12}},{"path":"src/main/java/Exceptions/UnknownCommandException.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package Exceptions;","lastModifiedDate":"2023-08-24"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"public class UnknownCommandException extends Exception {","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":" public UnknownCommandException(){","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" return \"I have no idea what that means\";","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":10}},{"path":"src/main/java/UIComponents/Parser.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package UIComponents;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.Cracker;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import Exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import Exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" private String input ;","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" public static Cracker.Type parseCommand(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" switch(input.split(\" \")[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.MARK;","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.TASK;","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.DELETE;","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.LIST;","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.QUIT;","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.UNKNOWN;","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" public static Task parseTask(String input) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" String command \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" switch (command.toLowerCase()){","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" case \"todo\" :","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" return new Todo(input.replaceFirst(command,\"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" return new Event(input.replaceFirst(command,\"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" return new Deadline(input.replaceFirst(command,\"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" default :","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"should not be triggered\");","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" public static int parseIndex(String input){","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" return Integer.parseInt(input.replace(input.split(\" \")[0], \"\").trim()) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"antonTan96":57}},{"path":"src/main/java/UIComponents/Reply.java","fileType":"java","lines":[{"lineNumber":1,"author":{"gitId":"antonTan96"},"content":"package UIComponents;","lastModifiedDate":"2023-09-01"},{"lineNumber":2,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.TodoList;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"public class Reply {","lastModifiedDate":"2023-08-23"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" private String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" private ArrayList\u003cString\u003e lines;","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" public Reply(){","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" this.lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"","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":" public void echo(String content){","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" System.out.println(content);","lastModifiedDate":"2023-08-23"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-23"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" private void echo(){","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" for(int i \u003d 0;i\u003c lines.size();i++){","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" System.out.println(lines.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" lines.removeAll(lines);","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" private void add(String s){","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" lines.add(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" public void iterate(TodoList list){","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" this.add(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" for(int i \u003d 0 ; i\u003c list.size(); i++){","lastModifiedDate":"2023-08-24"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" this.add((i+1) + \". \" + list.getTaskString(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" echo();","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" public void storeTaskReply(Task t,int size){","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" this.add(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" this.add(\"Now you have \" + size + \" task(s) in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" echo();","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" public void deleteTaskReply(Task t, int size){","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" this.add(\"Got it. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" this.add(\"Now you have \" + size + \" task(s) in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" echo();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" public void modifyTaskReply(Task t){","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" this.add(\"Operation done. This is the current state of your task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" echo();","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"antonTan96":69}},{"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 Exceptions.*;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import UIComponents.Parser;","lastModifiedDate":"2023-09-01"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import UIComponents.Reply;","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import java.io.IOException;","lastModifiedDate":"2023-08-30"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"public class Cracker {","lastModifiedDate":"2023-08-22"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" private TodoList list \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" private Reply reply \u003d new Reply();","lastModifiedDate":"2023-08-23"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" public enum Type {","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" MARK,","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" UNMARK,","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" TASK,","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" DELETE,","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" UNKNOWN,","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" LIST,","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" QUIT","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" public void startService(){","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" boolean talking \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" storage \u003d new Storage(\"./data/list.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" list \u003d storage.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-02"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" storage.save(list);","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e){","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-02"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" reply.echo(\"What can I do for you?\");","lastModifiedDate":"2023-08-23"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" ArrayList\u003cObject\u003e inLine \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" while(talking){","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" Type t \u003d null;","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" Type command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" switch(command){","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" list.markDone(Parser.parseIndex(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" reply.modifyTaskReply(list.getTask(Parser.parseIndex(input)));","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" list.markUndone(Parser.parseIndex(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" reply.modifyTaskReply(list.getTask(Parser.parseIndex(input)));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" list.deleteTask(Parser.parseIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" reply.deleteTaskReply(list.getTask(Parser.parseIndex(input)), list.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" Task newTask \u003d Parser.parseTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" list.store(newTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" reply.storeTaskReply(newTask, list.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"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":" reply.echo(e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" reply.iterate(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" case QUIT:","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" sc.close();","lastModifiedDate":"2023-08-23"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" talking \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-08-30"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" } catch (IOException e){","lastModifiedDate":"2023-08-30"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"Something wrong happened when saving your tasks\");","lastModifiedDate":"2023-08-30"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-08-23"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"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":" reply.echo(e.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" } catch (IndexOutOfBoundsException e){","lastModifiedDate":"2023-08-24"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" reply.echo(\"The index you provided does not exist\");","lastModifiedDate":"2023-08-24"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":" } catch (IllegalFormatException e){","lastModifiedDate":"2023-08-24"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" reply.echo(e.toString());","lastModifiedDate":"2023-08-24"},{"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-08-23"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":" reply.echo(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":" Cracker bot \u003d new Cracker();","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":113,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":114,"author":{"gitId":"antonTan96"},"content":" bot.startService();","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":116,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":117,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":118,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"antonTan96":119}},{"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.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"public class Storage {","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" private File file;","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" public Storage(String fileString){","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" this.file \u003d new File(fileString);","lastModifiedDate":"2023-09-01"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" public void save(TodoList list) throws IOException{","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" FileWriter writer \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" if(!this.file.exists()){","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" Path path \u003d FileSystems.getDefault().getPath(\"data\");","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" Files.createDirectory(path);","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" this.file.createNewFile();","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" writer \u003d new FileWriter(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"MMM dd yyyy\");","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" for(int i \u003d 0 ; i \u003c list.size();i++){","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" StringBuilder taskString \u003d new StringBuilder();","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" Task task \u003d list.getTask(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" taskString.append(list.getTaskString(i).charAt(1));","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" taskString.append(task.getStatus());","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" taskString.append(task.getDesc());","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" if(task instanceof Event){","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" taskString.append(LocalDate.parse(((Event) task).getStart(), formatter));","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" taskString.append(LocalDate.parse(((Event) task).getEnd(), formatter));","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" } else if (task instanceof Deadline){","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" taskString.append(LocalDate.parse(((Deadline) task).getDeadline(), formatter));","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" taskString.append(\u0027|\u0027);","lastModifiedDate":"2023-09-01"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" writer.write(taskString + System.lineSeparator());","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" writer.close();","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" public TodoList load(){","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" TodoList list \u003d new TodoList();","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" Scanner sc \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" sc \u003d new Scanner(file);","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" } catch( FileNotFoundException e){","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" return list;","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" while(sc.hasNext()){","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" String taskString \u003d sc.nextLine();","lastModifiedDate":"2023-09-01"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" String[] arr \u003d taskString.split(\"\\\\|\");","lastModifiedDate":"2023-09-01"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" Task task \u003d null;","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" switch (taskString.charAt(0)){","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" case \u0027T\u0027 :","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" task \u003d new Todo(arr[2]);","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" task \u003d new Event(arr[2], arr[3], arr[4]);","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" case \u0027D\u0027:","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" task \u003dnew Deadline(arr[2], arr[3]) ;","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" default :","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"Corrupt file detected\");","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" if(Boolean.parseBoolean(arr[1])){","lastModifiedDate":"2023-09-01"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" task.markDone();","lastModifiedDate":"2023-09-01"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" list.store(task);","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e){","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" System.out.println(e);","lastModifiedDate":"2023-09-01"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"something bad when loading\");","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":" return list;","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"antonTan96":98}},{"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":"import java.io.FileWriter;","lastModifiedDate":"2023-08-30"},{"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.*;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"public class TodoList {","lastModifiedDate":"2023-08-23"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" FileWriter writer;","lastModifiedDate":"2023-08-30"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" ArrayList\u003cTask\u003e list;","lastModifiedDate":"2023-08-23"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" TodoList(){","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" this.list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-23"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" public void store(Task s){","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" list.add(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" public void markDone(int index){","lastModifiedDate":"2023-08-23"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" list.get(index).markDone();","lastModifiedDate":"2023-08-23"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" public void markUndone(int index){","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" list.get(index).markUndone();","lastModifiedDate":"2023-08-23"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" public void deleteTask(int index) {list.remove(index);}","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" public String getTaskString(int index){","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" return list.get(index).toString();","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" public int size(){ return list.size();}","lastModifiedDate":"2023-08-24"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" public Task getTask(int i){","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" return list.get(i);","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-23"}],"authorContributionMap":{"antonTan96":42}},{"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 Exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import Exceptions.IllegalFormatException;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"public class Deadline extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" private LocalDate deadline;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" public Deadline(String s) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" super(s.split(\"/by\",0)[0].trim());","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" if(!s.contains(\"/by\")){","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing \\\"/by\\\" after task description\");","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" this.deadline \u003d LocalDate.parse(s.split(\"/by\",0)[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e){","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" public Deadline(String desc, String deadline) throws EmptyDescriptionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" super(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" this.deadline \u003d LocalDate.parse(deadline);","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" return \"[D]\" + super.toString() + \" (by: \" + getDeadline() +\")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" public String getDeadline(){ return deadline.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));}","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":32}},{"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 Exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import Exceptions.IllegalFormatException;","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"public class Event extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" private LocalDate from;","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" private LocalDate to;","lastModifiedDate":"2023-09-01"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" public Event(String s) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" super(s.split(\"/from\")[0]);","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" //Checking if format is correct","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" if(!s.contains(\"/from\")){","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing \\\"/from\\\" after CrackerPackage.tasks.Event Description\");","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" } else if(!s.contains(\"/to\")){","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing \\\"/to\\\" after CrackerPackage.tasks.Event Description\");","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" } else if(s.indexOf(\"/from\") \u003e s.indexOf(\"/to\")){","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Format of Adding CrackerPackage.tasks.Event is: \\nevent eventDescription /from start /to end \");","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" } else if(s.split(\"/to\").length \u003c\u003d 1){","lastModifiedDate":"2023-08-24"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"end time is empty\");","lastModifiedDate":"2023-08-24"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" //initialize variables","lastModifiedDate":"2023-08-24"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" try{","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" this.from \u003d LocalDate.parse(s.split(\"/from\")[1].split(\"/to\")[0].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" this.to \u003d LocalDate.parse(s.split(\"/to\")[1].trim());","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" if(from.isAfter(to)){","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"end time is earlier than start time\");","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" } catch (IllegalFormatException e){","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" throw e;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" } catch (Exception e){","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"please enter date in yyyy-mm-dd format\");","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" //check if they are empty strings","lastModifiedDate":"2023-08-24"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" if(this.from.equals(\"\")){","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" throw new IllegalFormatException(\"Missing start time\");","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" public Event(String desc, String from, String to) throws EmptyDescriptionException{","lastModifiedDate":"2023-08-30"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" super(desc);","lastModifiedDate":"2023-08-30"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" this.from \u003d LocalDate.parse(from);","lastModifiedDate":"2023-09-01"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" this.to \u003d LocalDate.parse(to);","lastModifiedDate":"2023-09-01"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" public String getStart(){ return from.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));}","lastModifiedDate":"2023-09-01"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" public String getEnd(){return to.format(DateTimeFormatter.ofPattern(\"MMM dd yyyy\"));}","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" return \"[E]\" + super.toString() + \" (from: \" + getStart() +\" to: \"+ getEnd() +\")\";","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":59}},{"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-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"abstract public class Task{","lastModifiedDate":"2023-09-01"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" private boolean isDone;","lastModifiedDate":"2023-08-24"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" private String description;","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":" Task(String s) throws EmptyDescriptionException {","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" if(s.isBlank()){","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" throw new EmptyDescriptionException();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" this.description \u003d s;","lastModifiedDate":"2023-08-24"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" public void markDone(){","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" public void markUndone(){","lastModifiedDate":"2023-08-24"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" this.isDone \u003d false;","lastModifiedDate":"2023-08-24"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" public String getDesc(){","lastModifiedDate":"2023-08-30"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" return description;","lastModifiedDate":"2023-08-30"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" public boolean getStatus(){","lastModifiedDate":"2023-08-30"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" return isDone;","lastModifiedDate":"2023-08-30"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" return \"[\" + (isDone?\"X\":\" \") + \"] \" + description;","lastModifiedDate":"2023-08-24"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":31}},{"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-08-24"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"public class Todo extends Task{","lastModifiedDate":"2023-08-24"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":" public Todo(String s) throws EmptyDescriptionException {","lastModifiedDate":"2023-09-01"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":" super(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":" public String toString(){","lastModifiedDate":"2023-08-24"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":" return \"[T]\" + super.toString();","lastModifiedDate":"2023-08-24"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-24"}],"authorContributionMap":{"antonTan96":13}},{"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":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"checkstyle {","lastModifiedDate":"2023-09-01"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-09-01"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2023-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2023-09-01"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2023-09-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" mainClass.set(\"crackerpackage.Cracker\")","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"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":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"antonTan96":5,"-":41}},{"path":"src/main/java/UIComponents/Parser.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-01"},{"lineNumber":3,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.Cracker;","lastModifiedDate":"2023-09-02"},{"lineNumber":4,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Deadline;","lastModifiedDate":"2023-09-02"},{"lineNumber":5,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Event;","lastModifiedDate":"2023-09-02"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Todo;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":10,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":11,"author":{"gitId":"antonTan96"},"content":"/**","lastModifiedDate":"2023-09-02"},{"lineNumber":12,"author":{"gitId":"antonTan96"},"content":" * A parser that extracts keywords from input text.","lastModifiedDate":"2023-09-02"},{"lineNumber":13,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":"public class Parser {","lastModifiedDate":"2023-09-01"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" * parses the command header involved in the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":24,"author":{"gitId":"antonTan96"},"content":" * @param input the command to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":25,"author":{"gitId":"antonTan96"},"content":" * @return type of header of the command","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" public static Cracker.Type parseCommand(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" switch(input.split(\" \")[0]) {","lastModifiedDate":"2023-09-01"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" case \"mark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" case \"unmark\":","lastModifiedDate":"2023-09-01"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.MARK;","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.TASK;","lastModifiedDate":"2023-09-01"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" case \"delete\":","lastModifiedDate":"2023-09-01"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.DELETE;","lastModifiedDate":"2023-09-01"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" case \"list\":","lastModifiedDate":"2023-09-01"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.LIST;","lastModifiedDate":"2023-09-01"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" case \"bye\":","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.QUIT;","lastModifiedDate":"2023-09-01"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" return Cracker.Type.UNKNOWN;","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" * Returns a task based on the header of the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":" * @param input the command to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" * @return a task extracted from the command","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" * @throws EmptyDescriptionException","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" * @throws IllegalFormatException","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" public static Task parseTask(String input) throws EmptyDescriptionException, IllegalFormatException {","lastModifiedDate":"2023-09-01"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" String command \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" switch (command.toLowerCase()) {","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" case \"todo\":","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" return new Todo(input.replaceFirst(command, \"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" case \"event\":","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" return new Event(input.replaceFirst(command, \"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" case \"deadline\":","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" return new Deadline(input.replaceFirst(command, \"\"));","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"should not be triggered\");","lastModifiedDate":"2023-09-01"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" return null;","lastModifiedDate":"2023-09-01"},{"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-01"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" * Returns the number involved in the command.","lastModifiedDate":"2023-09-02"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" * @param input the command to be parsed","lastModifiedDate":"2023-09-02"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" * @return the index requested by the user","lastModifiedDate":"2023-09-02"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" public static int parseIndex(String input) {","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" return Integer.parseInt(input.replace(input.split(\" \")[0], \"\").trim()) - 1;","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" * Returns the keyword from a find operation","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" * @param input","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" public static String parseKeyword(String input) {","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" String command \u003d input.split(\" \")[0];","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" return input.replaceFirst(command, \"\").trim();","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-09-01"}],"authorContributionMap":{"antonTan96":89}},{"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":"","lastModifiedDate":"2023-08-23"},{"lineNumber":6,"author":{"gitId":"antonTan96"},"content":"import crackerpackage.tasks.Task;","lastModifiedDate":"2023-09-02"},{"lineNumber":7,"author":{"gitId":"antonTan96"},"content":"import exceptions.EmptyDescriptionException;","lastModifiedDate":"2023-09-02"},{"lineNumber":8,"author":{"gitId":"antonTan96"},"content":"import exceptions.IllegalFormatException;","lastModifiedDate":"2023-09-02"},{"lineNumber":9,"author":{"gitId":"antonTan96"},"content":"import exceptions.UnknownCommandException;","lastModifiedDate":"2023-09-02"},{"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-02"},{"lineNumber":14,"author":{"gitId":"antonTan96"},"content":" * A chatbot that manages tasks.","lastModifiedDate":"2023-09-02"},{"lineNumber":15,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" * @author Anton Tan Hong Zhi","lastModifiedDate":"2023-09-02"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":"public class Cracker {","lastModifiedDate":"2023-08-22"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-22"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" private TodoList list \u003d null;","lastModifiedDate":"2023-08-30"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" private Reply reply \u003d new Reply();","lastModifiedDate":"2023-08-23"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" private Storage storage;","lastModifiedDate":"2023-09-01"},{"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":" * The types of operations supported by the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":26,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":27,"author":{"gitId":"antonTan96"},"content":" public enum Type {","lastModifiedDate":"2023-09-01"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" MARK,","lastModifiedDate":"2023-08-24"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" UNMARK,","lastModifiedDate":"2023-09-01"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" TASK,","lastModifiedDate":"2023-08-24"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" DELETE,","lastModifiedDate":"2023-09-01"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" UNKNOWN,","lastModifiedDate":"2023-09-01"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" LIST,","lastModifiedDate":"2023-09-01"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" QUIT,","lastModifiedDate":"2023-09-02"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" FIND","lastModifiedDate":"2023-09-02"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" * Starts up the bot.","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" public void startService() {","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" boolean talking \u003d true;","lastModifiedDate":"2023-08-23"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" storage \u003d new Storage(\"./data/list.txt\");","lastModifiedDate":"2023-09-01"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" list \u003d storage.load();","lastModifiedDate":"2023-09-01"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" Scanner sc \u003d new Scanner(System.in);","lastModifiedDate":"2023-08-24"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" reply.echo(\"What can I do for you?\");","lastModifiedDate":"2023-08-23"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" while (talking) {","lastModifiedDate":"2023-08-23"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" Type t \u003d null;","lastModifiedDate":"2023-08-24"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" String input \u003d sc.nextLine();","lastModifiedDate":"2023-08-23"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-08-24"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" Type command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" switch (command) {","lastModifiedDate":"2023-09-01"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":" case MARK:","lastModifiedDate":"2023-09-01"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" list.markDone(Parser.parseIndex(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" reply.modifyTaskReply(list.getTask(Parser.parseIndex(input)));","lastModifiedDate":"2023-09-01"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" case UNMARK:","lastModifiedDate":"2023-09-02"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" list.markUndone(Parser.parseIndex(input));","lastModifiedDate":"2023-09-01"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" reply.modifyTaskReply(list.getTask(Parser.parseIndex(input)));","lastModifiedDate":"2023-09-01"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":" case DELETE:","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" reply.deleteTaskReply(list.getTask(Parser.parseIndex(input)), list.size());","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" list.deleteTask(Parser.parseIndex(input));","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" case TASK:","lastModifiedDate":"2023-09-01"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" Task newTask \u003d Parser.parseTask(input);","lastModifiedDate":"2023-09-01"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" list.store(newTask);","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":" reply.storeTaskReply(newTask, list.size());","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" case UNKNOWN:","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":" throw new UnknownCommandException();","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" } catch (UnknownCommandException e) {","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" reply.echo(e.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" case LIST:","lastModifiedDate":"2023-09-01"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" reply.iterate(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" case FIND:","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" reply.findTaskReply(list.filter(Parser.parseKeyword(input)));","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" case QUIT:","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":" sc.close();","lastModifiedDate":"2023-08-23"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":" talking \u003d false;","lastModifiedDate":"2023-08-23"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" try {","lastModifiedDate":"2023-08-30"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" storage.save(list);","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-08-30"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":" System.out.println(\"Something wrong happened when saving your tasks\");","lastModifiedDate":"2023-08-30"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-30"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-08-23"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":" default:","lastModifiedDate":"2023-08-23"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":" break;","lastModifiedDate":"2023-09-01"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" } catch (EmptyDescriptionException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" reply.echo(e.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":" reply.echo(\"The index you provided does not exist\");","lastModifiedDate":"2023-08-24"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":" } catch (IllegalFormatException e) {","lastModifiedDate":"2023-08-24"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":" reply.echo(e.toString());","lastModifiedDate":"2023-08-24"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":113,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":114,"author":{"gitId":"antonTan96"},"content":" reply.echo(\"Bye. Hope to see you again soon!\");","lastModifiedDate":"2023-08-23"},{"lineNumber":115,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":118,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":119,"author":{"gitId":"antonTan96"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-08-23"},{"lineNumber":120,"author":{"gitId":"antonTan96"},"content":" Cracker bot \u003d new Cracker();","lastModifiedDate":"2023-08-23"},{"lineNumber":121,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":122,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-30"},{"lineNumber":123,"author":{"gitId":"antonTan96"},"content":" bot.startService();","lastModifiedDate":"2023-08-23"},{"lineNumber":124,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":125,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":126,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-22"},{"lineNumber":127,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":128,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-22"}],"authorContributionMap":{"antonTan96":128}},{"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/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 String line \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-08-23"},{"lineNumber":16,"author":{"gitId":"antonTan96"},"content":" private ArrayList\u003cString\u003e lines;","lastModifiedDate":"2023-08-24"},{"lineNumber":17,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":18,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":19,"author":{"gitId":"antonTan96"},"content":" * Creates a Reply for the chatbot.","lastModifiedDate":"2023-09-02"},{"lineNumber":20,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":21,"author":{"gitId":"antonTan96"},"content":" public Reply() {","lastModifiedDate":"2023-09-01"},{"lineNumber":22,"author":{"gitId":"antonTan96"},"content":" this.lines \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-08-24"},{"lineNumber":23,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"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 the content sandwiched by 2 lines.","lastModifiedDate":"2023-09-02"},{"lineNumber":28,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":29,"author":{"gitId":"antonTan96"},"content":" * @param content the string to be printed","lastModifiedDate":"2023-09-02"},{"lineNumber":30,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":31,"author":{"gitId":"antonTan96"},"content":" public void echo(String content) {","lastModifiedDate":"2023-08-23"},{"lineNumber":32,"author":{"gitId":"antonTan96"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-23"},{"lineNumber":33,"author":{"gitId":"antonTan96"},"content":" System.out.println(content);","lastModifiedDate":"2023-08-23"},{"lineNumber":34,"author":{"gitId":"antonTan96"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-23"},{"lineNumber":35,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":36,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-23"},{"lineNumber":37,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":38,"author":{"gitId":"antonTan96"},"content":" * Prints out all the stored strings in sequential order, sandwiched by 2 lines.","lastModifiedDate":"2023-09-02"},{"lineNumber":39,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":40,"author":{"gitId":"antonTan96"},"content":" private void echo() {","lastModifiedDate":"2023-09-01"},{"lineNumber":41,"author":{"gitId":"antonTan96"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-23"},{"lineNumber":42,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c lines.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":43,"author":{"gitId":"antonTan96"},"content":" System.out.println(lines.get(i));","lastModifiedDate":"2023-08-24"},{"lineNumber":44,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":45,"author":{"gitId":"antonTan96"},"content":" System.out.println(line);","lastModifiedDate":"2023-08-23"},{"lineNumber":46,"author":{"gitId":"antonTan96"},"content":" lines.removeAll(lines);","lastModifiedDate":"2023-08-24"},{"lineNumber":47,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":48,"author":{"gitId":"antonTan96"},"content":" private void add(String s) {","lastModifiedDate":"2023-09-01"},{"lineNumber":49,"author":{"gitId":"antonTan96"},"content":" lines.add(s);","lastModifiedDate":"2023-08-24"},{"lineNumber":50,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":51,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":52,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":53,"author":{"gitId":"antonTan96"},"content":" * Lists out all the tasks in the Todolist","lastModifiedDate":"2023-09-02"},{"lineNumber":54,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":55,"author":{"gitId":"antonTan96"},"content":" * @param list a Todolist that stores tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":56,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":57,"author":{"gitId":"antonTan96"},"content":" public void iterate(TodoList list) {","lastModifiedDate":"2023-08-24"},{"lineNumber":58,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-08-24"},{"lineNumber":59,"author":{"gitId":"antonTan96"},"content":" this.add(\"Here are the tasks in your list:\");","lastModifiedDate":"2023-08-24"},{"lineNumber":60,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-08-24"},{"lineNumber":61,"author":{"gitId":"antonTan96"},"content":" this.add((i + 1) + \". \" + list.getTaskString(i));","lastModifiedDate":"2023-09-01"},{"lineNumber":62,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-24"},{"lineNumber":63,"author":{"gitId":"antonTan96"},"content":" echo();","lastModifiedDate":"2023-08-24"},{"lineNumber":64,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-08-23"},{"lineNumber":65,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":66,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":67,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":68,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a store task operation","lastModifiedDate":"2023-09-02"},{"lineNumber":69,"author":{"gitId":"antonTan96"},"content":" * @param t The task to be stored","lastModifiedDate":"2023-09-02"},{"lineNumber":70,"author":{"gitId":"antonTan96"},"content":" * @param size The size of the list","lastModifiedDate":"2023-09-02"},{"lineNumber":71,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":72,"author":{"gitId":"antonTan96"},"content":" public void storeTaskReply(Task t, int size) {","lastModifiedDate":"2023-09-01"},{"lineNumber":73,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":74,"author":{"gitId":"antonTan96"},"content":" this.add(\"Got it. I\u0027ve added this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":75,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":76,"author":{"gitId":"antonTan96"},"content":" this.add(\"Now you have \" + size + \" task(s) in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":77,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":78,"author":{"gitId":"antonTan96"},"content":" echo();","lastModifiedDate":"2023-09-01"},{"lineNumber":79,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":80,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":81,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":82,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":83,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a delete task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":84,"author":{"gitId":"antonTan96"},"content":" *","lastModifiedDate":"2023-09-02"},{"lineNumber":85,"author":{"gitId":"antonTan96"},"content":" * @param t The deleted task","lastModifiedDate":"2023-09-02"},{"lineNumber":86,"author":{"gitId":"antonTan96"},"content":" * @param size The size of the list","lastModifiedDate":"2023-09-02"},{"lineNumber":87,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":88,"author":{"gitId":"antonTan96"},"content":" public void deleteTaskReply(Task t, int size) {","lastModifiedDate":"2023-09-01"},{"lineNumber":89,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":90,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":91,"author":{"gitId":"antonTan96"},"content":" this.add(\"Got it. I\u0027ve removed this task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":92,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":93,"author":{"gitId":"antonTan96"},"content":" this.add(\"Now you have \" + size + \" task(s) in the list.\");","lastModifiedDate":"2023-09-01"},{"lineNumber":94,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":95,"author":{"gitId":"antonTan96"},"content":" echo();","lastModifiedDate":"2023-09-01"},{"lineNumber":96,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":97,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":98,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":99,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":100,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":101,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a mark/unmark task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":102,"author":{"gitId":"antonTan96"},"content":" * @param t The task that is modified","lastModifiedDate":"2023-09-02"},{"lineNumber":103,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":104,"author":{"gitId":"antonTan96"},"content":" public void modifyTaskReply(Task t) {","lastModifiedDate":"2023-09-01"},{"lineNumber":105,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":106,"author":{"gitId":"antonTan96"},"content":" this.add(\"Operation done. This is the current state of your task:\");","lastModifiedDate":"2023-09-01"},{"lineNumber":107,"author":{"gitId":"antonTan96"},"content":" this.add(t.toString());","lastModifiedDate":"2023-09-01"},{"lineNumber":108,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-01"},{"lineNumber":109,"author":{"gitId":"antonTan96"},"content":" echo();","lastModifiedDate":"2023-09-01"},{"lineNumber":110,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-01"},{"lineNumber":111,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"},{"lineNumber":112,"author":{"gitId":"antonTan96"},"content":" /**","lastModifiedDate":"2023-09-02"},{"lineNumber":113,"author":{"gitId":"antonTan96"},"content":" * Prints out the reply of a find task operation.","lastModifiedDate":"2023-09-02"},{"lineNumber":114,"author":{"gitId":"antonTan96"},"content":" * @param list The list of filtered tasks","lastModifiedDate":"2023-09-02"},{"lineNumber":115,"author":{"gitId":"antonTan96"},"content":" */","lastModifiedDate":"2023-09-02"},{"lineNumber":116,"author":{"gitId":"antonTan96"},"content":" public void findTaskReply(TodoList list) {","lastModifiedDate":"2023-09-02"},{"lineNumber":117,"author":{"gitId":"antonTan96"},"content":" this.add(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-09-02"},{"lineNumber":118,"author":{"gitId":"antonTan96"},"content":" for (int i \u003d 0; i \u003c list.size(); i++) {","lastModifiedDate":"2023-09-02"},{"lineNumber":119,"author":{"gitId":"antonTan96"},"content":" this.add((i + 1) + \". \" + list.getTaskString(i));","lastModifiedDate":"2023-09-02"},{"lineNumber":120,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":121,"author":{"gitId":"antonTan96"},"content":" echo();","lastModifiedDate":"2023-09-02"},{"lineNumber":122,"author":{"gitId":"antonTan96"},"content":" }","lastModifiedDate":"2023-09-02"},{"lineNumber":123,"author":{"gitId":"antonTan96"},"content":"}","lastModifiedDate":"2023-08-23"},{"lineNumber":124,"author":{"gitId":"antonTan96"},"content":"","lastModifiedDate":"2023-09-02"}],"authorContributionMap":{"antonTan96":124}},{"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 af9aba57..aca33205 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":"6273fcc9c1a43172ec635ab481694f73064fb63f","isMergeCommit":false,"messageTitle":"Fixed errors","messageBody":"","tags":["A-Jar","A-JUnit"],"fileTypesAndContributionMap":{"java":{"insertions":5,"deletions":5}}}]}]},"authorFileTypeContributionMap":{"antonTan96":{"java":631,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":5,"txt":3}},"authorContributionVariance":{"antonTan96":29127.688},"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"],"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":{}}]}]},"authorFileTypeContributionMap":{"antonTan96":{"java":991,"md":2,"fxml":0,"sh":0,"bat":1,"gradle":5,"txt":3}},"authorContributionVariance":{"antonTan96":62617.402},"authorDisplayNameMap":{"antonTan96":"CS2103T-T08-3 ANTO.. ZHI"}} diff --git a/archive.zip b/archive.zip index 2aafb05cbdb2e25292842de841817ee1fb79af31..9528b32bbbe88db441731ca50cb1db05119ea969 100644 GIT binary patch delta 623374 zcmY&Y3&w0A4tA158 z-BmT+u@Uj$;hU-8h{|%{5EvjZFfbshaAf(2FyQ}vG@`(0i2emuvOl5zf-B`+y1(GJ zFC*Mv02-FY^%rFI@I(Iv8^isqe?ji6&tImQ5cD_4|CrWW4p8R5R4bVP=pE5t4qG3T z7ve8cHwOJc|BF;zL6;!^B3f@yJBq(3Jr{Hh>@RXF03F8oiv(Ihf&Vyx4p1QCKW+>Z z2KFzKo&&XE`-_?(z~cYyl|cjBXZXu83WG5r{6)s{U?;kNk!&d#-ruFSTGoP%Q~u@H zmciiu`7FEzrpx@7%SHsB{~M52XAJO>fBy0Dg5&(Nt0@LfMEh6H!ya7bpYEV5c<(>C zkPPsLf4V;T;LfUlzC8Kw$jibR{4X|M`6D4DsV%TueP76v_W5 zmnveRgWfut1p)UrAFYce5N=|B47V0NZIH`<9dFr&+y?)9ki9*~{~I~c{j|I8NmLtU`{!w7usC#FSoD- ztq+I#U*xnv{+}0R>fRPKUaH_P6_i$+Q)s%s-|5ygVi+j+zgqdUFjN2X^1~L!@gKME z4x{xiFZ@L?Cjac@Rl{ul;{Y2l)2M%Sm9AjUCI5#~`PpIl0dg)I(nviwwZ=|0DO)#T zjzoOp@-|sTXkI6EIp7`m_D+Rb5lQG;6JLHJ6N(`%RVyVHE7<7@;nO$Zczw`*bS7)j z7E$nJBOWJ>){SKY4doUK?`X$IXRY_(^Qz=g$neoiU6I;3e=hXW^YQ_*{lNsxTqp(n zvXthzmT2AKDxT?kf+d@{V@xyWV%+nC4RB@$X&yC z0m%Tu;Br_Qw0h1DMB=*nXUKCXRXho*CXp4Z z3(-&^HSt}!R(36jRvekuOP)G4UarO*MAnEXaev0AIyxf9_8V^cC3G`j1No!075=`_ zoGnv%KxTO9W*Ftdf(lE1bO5E7Q)}rUwWV>+*FGoAGZx+*(3HZq6pLgsR%33f7pR@7 zbXDRzaXR}WiKWcA>rNj=A_QXNXF)rx<_8W-9q<&OFocntvG()Y&T@qaPp8I6#Z&Ht zoKQM(Lt5=ONkVj_+L;I-pf9-9829ebt--JYC+4^gT45NnTX+lds4n9&!FDsBKi!{O z<{1sz-=%ET4&0pFj9#atY;c!nJzA4uuP~)ADAoPMq2kDxRnPeD4=_w&cNQwuYzdE0 zSI_T@-DzV|7~?(Ot4YL*$xFG6ReNz;JF`21pxZKSg)q>f-WLf_*+@MAR+fdeA~zCj zV1UpAu2U^I_$en6e%}_U;O8v>JnAUNzB2<`dMpZYbLPy6-E9MUOiz!#Kg|Pcrn+4l z1!@dr`i6sK+GEa$VGlRIxn&v3hQei?@M!aX)1*Ca_Q+c6V`%ly?Q7da!GRtM*x#2y zJ%7O(;6{NmGd2T6j7XQ@N}n?qF7cB)P)JBj*phtSd^cty&X>d3=1)rlbra4nWJ%hA zltpCpM&9j?^3@{tD~fKiioD2ateLd*3@xl+#L9Lus8W@yx9uXh32^G3M^VC)VazF` zvKF`+R)1!-*l1pwiLx_WOae*MNbs(0;=@f`W5Ci{FjoK!-@J_bwpjVA?mh=TnuG_; ztL2)BvZw!yIK`+Ii_o({CiL7xJFtmS`s&QHKk6^DK7KkIA4h}@Hs_|C&EeO&q+0rP zguk_8fz3I6@_lB+Ddq9f7D-|i?{DVV_JXtx-qU0)ldTO<%5(T}CoHPhwnG1p;A~^|1KOG|6tbzHy-!hEgrT<3HhrLK44MFC-09=!GWSZLR38TZ+l$lNd_9>sRVI`vnnb&6^Y*WnlHd&JFu9(eEQ4l#K-bndy_Pw#GWbl6uv zi{asm$caBWVkUsHAI(am_!s-@$g3$4?I-$dGtvhZXFA6-3A-As)HXj6&)jRd)3SBi zGFmsViH))i^m}-7s@xv2>Sit3_anr$2-U$pZrSE8!k}xsRy&9ziQWzqDwm|o1SsAv z0A`zRiwsOjtYGY0N2ZG35*^G|(12}svG{+`u`o5*e66*HWw^#nAApnC8UnK*qMN|U%T5*4Pi z*lunwOhq8Pkz#CDu)k}U(Du$2po!1FsK)>}SAQk7GeLe&bw1r1pY1n<`bg~c8gC9(A6UhO8X@-#^g3pp2JEm z_I?3;rfu4+&5;0$qn23 zVdXUEY>h?AxCKXt?)v~}83&{ZdhlbPiL+XWaR#dIlnLll=QAHhT12(CR*^&Zw^X6j zLa1_!er9oJ(Gf*IFR4})XzRPG+xLsb(U5-G-Wpp#}y{=H)PO zMh1{6AC}a?sKA2rm7TCZ~Cd;?L~=>d2|pz9ld~`%cJCPe@|viOFbEG#MzcVjX?G4zVq)D zz<_-mFbN7wcL+rC8LbGC({#BfxK$by&K6=QQLb*DqIH5DqshIsl-21Na6iU%HPApK zATx1eu7ElKNQ5jk=!6((!z7@>F3Nf4=n$=1LtzGxNN6UG zIb@9nl1EGX*!1F8Q-9Z~2`Ocd6no;mKMu-#+RF^J{!ZOu*|DW+wvnqa^QE59P8I|^ z;@%lzx#v^Bo|-u9%!qw1;Kw*ztZJ1qJD-RmnL22s8JJrJNcATrdwBi@(-kt+Q`B3R z>2I>4_r8`oua@k0GxwuOXcHPRo4oa-%S2YFDk-};&JnCQ%K3zBJT56)z8p3UbfX2m zHEjz^|3hP6pur%M1hx8#HU$9q?@V&FDaSZq1u7h}WoPPA3JYf5`C#r@?uQ=m!||sy zsb5@t%8)Fsp0^Wysihv@x!32o5o04Zc8;p<;={A6>w%(Ur0%0K)X5UyE;T|Q&5CAF zPL@6)H;9)~bjt~J zm`z>VEv2U!F;dLvnI<^kdi**FsGyobBK1-1^?TfJBZ%^3N1F=pLTYA0A_c<`jjdqu z$MUTkdvZngo30*_nMuY^5#EMv%*PECPWL?F76Istf`GZk1FrsEJKOWo@vnzeN%r|D zH74GTjwK#PjSC{-nnX189J+ElldoIsf>I!wt0{rN0hkADQ(!Iv{jk;7Y$D*y)fhI%lu8sB*cP~dyF629_F&E?3XKZM zc!=As_HLN>(0#495tx+iyk#u@9kg@K-{N3#dfZ@w>y-y4bbufs#I)2UqC6ra#lQ%ao~&os`bG^uztvqPPp^SPGj1nmTf<-zRKrku$S z%%$P{&>|yLpiR+JJzI*)H+eQxm9SOO9SqHqGPKwMgO74H^T%tnV>t^`r%a1OG@%7g zi_GN(DYO_ECg~V-C2iG;sieoBcm)uN^jBO|lq@a79>=vqvH9!90OUd8E^Wxv>abDr z!DmAy-5*PgOO|ztTDW}kem<%`laggE9Uyl|bOURBm=Cp{NYrL+{`#y#bR#r<$SqvE z)!4&;NK82(aXPg4dtTs<{dZooQ$rC(E+B&U}w&N!1~ z@cC2humlF9bb+T#g#=#1gl$5*y zV^!j(g_t2t8y?6=IIy6L29m;+Hc=IV1*3;M6(Zc8z~{JDkZhP79syC;~oCWsK- z2{U0TGD$PhE7wIGA-Aj8@%m!IiZN=?CS{`{^oO5;Tve>6YuSe9&|_AttfpmOY`+)5xb0$1ti%jtmzZCY!Nu#k z>zArCZDU=mK#5aLxHUWhF?Py6?BZOC#y-BmE&FT~~Y-G(AqM4?~W(#4l8SvqrzGGl5B$F$Io5bg0glk0h zL>!2Wy{P(V?gg7&V}Nm7YBTTDQc>r^DwUU#&}^p=1q zW}vpX^R)^C#*;~^gw%i2jH5D91*H|9g7dY>(sZ!KI28=ZS~G%5F)id-MBBM0_~D8; z<*?ZlS(NM$h_(ua1>>xiZ=i+iaRHsDOG0>7nTxT~jAXbc)}?zPs@d=elbRaY$L%o5 zIfUkp@e6X@>YT+rt9iRUk5EOe)B#xukce*CMp>t;kQHEPVem9HfUb*Y^1#*?zpd%c z4mRl8%MEySn3gLrOyu2>xXw|KC36f)XVH#?s7})n3V%r`_sr|p??PlyF*L^dhn8Ym zgnfQn2QN4ia0Z2J`jE@EkDD=35vViG{4lWN_8PGZ^ToYR_UQ>;p=4S;XuXmX z%_s2wQbuvQJyn8B0E*$rm0#tllr~zfZt{>kh47A~bWP_T$v-08`qcyU zKXu_@Tl-8F$L32S*pB4fVmhC+{A(OPA6(;|g~1q+ygWWKaO8%d=!Ot__h)5j2eeV< z!nZz5vGG@r03RmC`i3iL!;woOnF4PK4u2m56GIG5}I=2{kN zxJsl(g=;e-x{H;zSZF%m?2pl^#TS)cdcZ~5iA`DiG zCraiX!SxS(kUI)+ocWxf*d3gqd((-pjHOk1!h08~l_a()lVNR+DUFPHT}`eyv!xF^ z@$`;Fe5WXz6I%gruNiOtU<{fx<7~^FPgCvK={+e4NT=?auaBkbw{*N#ic!#p_{y^H zzCTFAxzt$BjQos$)*t$uqjOe6i2a59%P^-)@LFK4P-*t}G1BL)%FtwcZW0LJMuHfy zUwDN^xNTtOBkw8=E%mzp9Em`TFD@G>61x~Ct;Y<#JDmtnQ`MWVigV>9e*UisvsU8e z<0$$Zdn)Camn8NW3avHAG3;7WI<@Qetk*7M2t4Ka97@;;&KgD2@ocejYPyw{gwfju zN&iOgbf1~#Ic`P?<<6BJM@Frk!yq^xnX^ZWOWR2%ecY6PHj{#3k*F)PO|dhEY2xem zGQ?uAaUKQGf9URG?_j0q|H>!otTntMA`}shI2lpLvBwS(6{Q{@%WF@cbLQ_#lEH(m zT#Rr`GDdYQ|CWHE%GO3&J>0I2z`1fV5lLdLSR7=9*w6_Ty+hv*K|r1|G!A0PkqfSN zbvJ-HS#5naJoI3$N=CcXwWP>D&*>b5Kc>JpoWl-Sa8`(k5tJ7dLrcK2o~=6@k@a7c zsK_(NahQ^+?<-w@31DD`2WkFhzDZI&A+fHRRxMfDIsH3v+Ym9s+OsdzERe8{Mu*pF zBBQZ7<5%c&zKKDLLq;susPi`JEbmk+a}@_Yf-UHyV>>8CIvqur%C5tuUds2g+cv=D zGsPjm=Y4Qas@TZSbaRn{#`LkK|Lut_Ur1?KnatSp={z|t()NkO6J@6b4rVMnk$wyZ!m&%?`s zaiC%uj8--pc)@O?EZO${rSAVmi^riYxn~H7)mU!!8+%ji|0eF-X}_*qf>goqQhK_b zhfPKXzS-#k#9yyG0}T8@qytz*+Mbls``9aXB|3o88&vDh){Ei^OUL>P(U(;O;XJ8S zOS;Lst>3Vh3+V)ObiUpy?k~09?K%8h&Xl~{fh+?*qI3NUQ}ulJN}CF{Jnui7_|YLf zIFKu(YH)C|f>YvvKVp*BVQ7T_MkrBX%ZjlgLb}>wjv8I*6$pwbl+;Zkb_YgYK-@Mc zHrLpGKB$RKm+d%3xB+)%cb%P`nxFtX4Cs3MU37ES9oMTG1xkpH>r$)XogE^H#i(UXUteuZo+?OWBepi^ zdFuImDhQr}t!)^NN)P_L&461s`sMcdj$utQ@Jrbda5e?cHmljeo%j5y3UvOg2E1_z z(ONN9TsT)H#oR}@5IHHmDaeZT&?9DKg^AGsB5Iw-?c~?DAz`ub(mM|Rhrb?b&8;5nCl?PWef1%J2v~cwjHBw+!4)vKD3hGlW(GfKs z1tp$ijwdhLZ^TcZR4vY~VO_PxD2ofVMK?O*@%o}x7T={I-gQl{SZi6y0pe_8yI*sJ zwYU9oy6hLc+aarE*rl&lr}zK^1M9BvM;^ROkIT`_Xjak@F;v+G4cf22hbf}Wajq%k z>W^jlhBP-Nwn88G?M%C46<%SQ)&;itgw9U3-)KIzy{^LXx50GZ)Ka`FVw(Ba1NE%- zX!IDST`m-keHC?AC^U2K0p}sjMjRDn;J>`GQ%I6a!LD??&wcq7Sav~oUwE= z@Uw^MEn@x9)>_`zW#nNm-U)s^>tOkR1aYrh?onNk|9Up*5~qX{Az(&Au=ngPoDPd7U<9+_-0vw{Mtq7@1XOOR2MxwmaE-}0 zqlPu2KJ#ctK~)#r??gJwB-b`GWIiH zn>p-gj+Wt!&XTKYm(8+U;c1dcN4bj0bXD_XP?UCt)!uGX7O%EA$msK%f+kcW6V^px zj6M%*>XM?IVU|8m06(h%feoq_$HhD^3rDHNt!=f9L#k>OZYc>?kV!h{Qzp&rS{=7q zYwEqflASGwk!42%jJCp$V%Im&YsFBd%iUF|OY(1j+7?q#Lz+^O`E5z378W_K@^(P_(y+24QJ7F$^RPp67g0u^Oe@FiTMJa?~Cre zU=)L*7hi=1<{{8*L&%O-d8@HLps_6cAdHeB?-u8qrzVlAe*DF%D6plGrY~OHdO*%j z#8u2SLT=m`3vd-5w&AJ%gQR=}i(Uir#T<6h@;dXG{K}$^4)no++8?HEvl9}ua3DFV zB6+P$b1~m21|oV;g#^6ZE7o z)@6wi?y0QfmW$=LCG#6D5-$4JmT61w)BP8V1iM4B0bLy;k0kS<_4?lNrN&|(8yJF~ z>rR$$@=7jgzA|`2Mml5W9$O6JRc&At42BBSWCgS*>|iE&99aIM z9w+BJ0P8YCNR#h>db%h2%D%v*)w+h1)`VEU%@9JU4I+#w4A?qnM(|P)ABumwePUq| znh}rI>;y0NxZo&M!$W?$9|}5`a_lz4O5DXY+cg9PHMO63P5*d#o>D9VCS4SUu0JQ$ ziAFlt&?<79p3Y?0iN8)>m~WFnc30N4zAST614zj?**m6_t9=WRv2!upo;=>MBC{Zx z9m~qo3%D1dvV9q9+4}>Sc62;+8$;im0#asWpwz;q&U>h;hr3TGd&>_s(Gep_pVq=S z6ZR*fLQ2&SZhaZC+vR?`t1U5sx(i*gdoP+(=@|Pwq6@~ZP>Z^1NSf#CYcW*9_@BS2 z0@Cu>wTlChhQ}d+9$|~B>kceiM8z{T6TcR&869~kq%zhs%E{~+B1!R@o`$$(xmBo+ z?yP7)MwN)z@#ReY0Q5Ret|dW(K=ay@+2Y1(y`iyUzH&Ivck-Yr zP4F@KdBl}_k3pHym>c2lKE5jg_<`hQ0X-2~dn^ zLKV$OTxZI}q+&RX5#pp*wK^L=EsBeBm>1hCRy48Y)5&Re1AGdx0;1Rep+IaC0kH!M;Y35-F+3EZ}%mj$lRz1a>Cz zg3g3jE^2S04a()5(pWNT*(y^U`wqhuCZ#)@iqKq%rw3QQsT)n_s2w(u0&tw0_Cqu_ zs|{v*wmVg6n zrYy+4qs?W%o7WjJy9lPN0yqdn&kb!JDRvNM14GnPg&T6-%lKK8l4ehiKiH>V{xXjTcs(1;UfQx_G z(@M-$ObIQ=O0L>Re|oX*9x{?RdQf#*ugW9!1DAIBu@5muv=iQ+2iUEKqEo0YIQY1T zRu(|Lc%jzG?txwkHNI#uU-`Z6|Lp~{K?|qZ$YG7XG;10x%crg^I;0f_I@=R#ncMU7 zxb4iZ3MgN!khSa#VR7En^LizIz8~~ka~B&08p<3##}!ERz#J;tl2&Z_`;`WtX?1_p zW-#}%8+&Dfls z=#*xl*DvPK17sPQB{|w2rBoTzifB^_TXmGnQJU#B4(EDIWTK(zD$F_O zmokA$i)>Yzt3lCp#m)Hed=^r+HXm$i&pRFu(fmGozV|v2|1AMO$G7sm-X{DA*5-ke z1`O)D6<4q7L!NTXf>8i^H&-x15(Jx+HI)65_`PL}a@zs;Iz}lFVF%Iffs8tf zvb|d##+9%?mCC(eOm-ZeS-XDCC>o6Z5`7^sJxNmpZM<`<`Uen+{%5c7c$6=)dOS_k zksD@=pj`%as2Q9qB9O;NFj^1`QU_2`OKnpaev=R;;PRQ(o7w)2*`cl;o16R7u7}k> zO^p4M;&Ghrf$mJ4CoGO^aPniL51@{5x9~@mMW7AS?xvNl+_893=7)ilD7q4?Yi~jJ zOHB*nx{^!`DjC3q*{?{iF@11N7R;#L{@|e{p)Yh{Gb?kVU7nd1$1C70C`tUkF+giv z={Kr&%OU9(bVWzdTlv0Al~hRujq3g6t}ttxu18@I+}j}`vpRp$Q%P+`VrIo!ieSm; z$8LM4qImL`X3d9pP~CTVYa*6}`(;KHMTa(iX5pyUZCrqtmvX!aPXF`sGFQJskDF{q zZt$e-7GuF}b#85RD&JA^8=`X?IHNs3Ztdl~;;`xUM5q}U(;L#G!Gp`$=6lUsxtmeQ zO-63qO8$S_h?UC!ws~6j2H*z|50~!^ep^L{XCNI<;MobGZ;M;x>()sJZ&6!roTW;@ zycXLKKr#%KB8c#nTcUDni@k#+NdIHyRi9-!=hYt) zkNLpbq2(te->ZwfJ@f5_hG%U5-D!#TcXgi`50HGu%=076E0>-XchIcj=`VNMED^Y+ z`rqz_n7aszgH0tts3R$aK^4mH}PEe+8rQw-VD_ZI7uW|M`A5^92yxXpZVAOjzu zObmjYbZxbj&M~SIcN@80dJPFLke4#+3rsb5K2oh+^|PN1Y7cfK7TRsyFGZVQ+1U9w zQ+H+3=Hj2YpQl+c6FUV*8HTLwa}O|pfSjg)pe?rmWy(CCS0RPIm4+~@4p=YUHE)bASSyKk z9n%34x8GK&4|KSr=Q!6^zkZuIYLD0^YNvD#SaE1X;%Pi?78SB7h1k=>yyHbL0PxPG z5c3U3kGH-7b0N>P>VMJE=WPxBS5Ze+uw54Q`|wHhhpKaaV%GI`EV-Nt<=Lp2!M2lQrdA$I(HXWVUlwqQ1LEsovlzsZI4=eSJ>y~?cVJ)a$%?E4}v zGgu);F`mqPqk~vw_3{AuIDyi>R|wrUfamVTqON~pa-mYrc-RW*`}e+a`4(qTV5x`S zF461qv0-*Z$Mo(>MVCD}fu{Eb*1#GQI`tqLXc*Q#6=$oEq}klfSx1(dX8_-_uhN^bv+Xw7a?DRSKSezLM7tJ7al05*33}zn2qe#hI;v zI5`gFm1cI^-(|ni-I1@XyC^Lu&d#!0^XK(Y5MJkzt{^L6rl1;Fo*A%ukwy3{*T>UL%& zeQpS+680hBaI`ylumJZpW&#PA3#+_s{r&P;gy40KuNL0oFHG#HlUlzUx*;OmYF79; zvPB^bfj{$9OwG&;vGiXr1d2UZiz~33lt2jOgjP)%p^7F$Ly6c~CEctQforf6(9UNC zs>`dC?2-~(a-QoA_9Ia3OMrr&&-l^8>0ESALBTHpr!ZOtQLxbNDC!e%m$P_<{?vUs zkcrYL-X=?(B9L&WdR4QyK7S2-USxgm1U-h{u48BxnaaoA#F;XI{R}7+@QT@TMG*74 zumr`NE{+Nz*Nm4_Q0+NefxByh_AzYbQixtZp}`Gr>ep*uS{ka4UJ^k`vQIPYv|{e4 zwT~h;Yls9p&yDNw7-|P#t9=~zT}y)1mCyFzMPu0&x8Ma&;?+&7Ehw4FShz1q>F_%mx2W%}sxHp! zXiztnXg!Zgmcc4E*ObS1OL#~pmN-30Unl@ZYlCVa;`yzPn5_U*N;_^s&Ht9b$YVe^ zVqFy~iiHKX67%$5fwhPm4ax&G`8h2+Q8qcr#4rqRx@r;#e9dn(}%;}j)Y5JWS?smeJoc!R5hRwi15 zIR`6JC>}U57o6>4F{RXDq?3~UYJBv;&jDAiY;yroDSED{W7{^dI#y={i)WD#ripU$ zrIol@GBvjZ+)j$Ox>6M9;Fe63PA$njOpnlrcpj_LfTKdM4;Gyt*<2d!-^jaqkW)g) z{gHX)G@N+~G{dZ=w|9G9C2^bguk^ib)MT8!Z7mawuGR6ZyocP{(6sh!1TkH{5~oDJ z!hXX&WG*M?0jkyOgjZ^R^c6E@(ub&d^c)vR<7WblFrKzhpmrE?~Wh#(K+no zw>XBm09U0)MIuB3Gc9P5-U57bgD#5zH{mT-)dlnkM(#hL8;y1}^9wm{i$oKKlc%6f zmYr4@6vUfdmN8u1NZ9ijiiXlm%3s~u(;{8YzXh68n?1;er)KRJ!~Mdm1bQWMn`Kt< zxN&hq7;2*Y{r%_}YtMGx`wfk@j2y>mJRul(0eaH$m?Xq=u%&bsZe4T?)^zPegY*j~ zWif8S`cwm>p(?TGN3;@nw0-jxSmeC*Jwcpv)a5O0f2ay??JT5f9+y-Un>cpkqCe2L3!qf9O( zfRZ7htpvgbmz@@#Nw@I9R&S!YZ+(yZR(4Oun zYW;AJQfQ&9b3eN0q;j9n_we?J+y;s7KBXgSE&3Nyjb0N8#vn$t^OMIoY(0qnft4ItL<_0M@IlA|&>?2N8O{L!qH zy1%k|1jVSNqHP=@F}6m~1He5yDCUZ8k{zgTNruKl(k6FV)8~?hyp?yv`9aFe0eR+% zSBN<3irv}bz7Q#k*E}rWQ0AZHS4ww82n_+XKCRv^;XkTT?`Ex$dWcoN zd?GeW|h%hWt5Z z@N`w|G*%2c?;Lp{yKnVl#scjVcSTy#MjXKYmr@ejcu$v&@2AKne94`UVJmMsH-*o#BP7 zL9a{Y9N3$)YAC&_4G~Vy4owqjOh^)cbAPU#w6qHwyVA=Yb#aLA_ntqwBhZ!3wLI+K zE}PAyzu~r}DLBBO2HZzae02W4!u4tb3B#dj;5vWSKmw&VCU4bU{E(d}1E|Q(J{?qn zB8V0Zf~0MPC!O1uM;9}bdY`cVa*M3TPEv~+*WQy5Vr}@23Jy7|X~3pDUjW~_L1}({ zz1im~?6gPGvU0Dc!+<4QETXq2u0m`~fg#xyt-q9TC6fGu$((&L1gO|> z3$2zZR<0OY%F1NR8x8!52dDoTl-g~>A<5~fmsHy4H7RF3%z#)LQ6Yurg;$o%fe-SX zgeegdr>@ffWx1dCRM~+Ldc;v0-`vb`yDYWD5|$FwHg(z(mJzVo2Y}_BsAr$~6spi?|%Y~Z@z6a#L`x5yM8593{Ek+B@?UY_~u z&Q-Z65hVrLyVId#1Tz@A3Q7uSRcfj^bEZ|A{flS3{Hl3@rI5l(gKzr0;fv_~EG>R^ zz1yGH;;`1eEEn(#H=^9{ywsGx@QH3oX|(HbdHZpJg=rddS!wjsZaKmK-OwZOOhl|X z-*$Ff+LS*669-{Z%6?Wta^rVJ^!!m@COmbX_gh*j>A5=ETA8Ux559~USyVR3dLVhj z+&G=z5(2XQK?4~B9mjjr^04&AK8sLwWAM!EQoLQj^fAB~0RRi^yZn9r14i{k(-JS$o(4yC;><{hztd?t+p_d%q$o+%(xTE;iyqv{(>AqD%>+PrU4faiA z>xqiqvH%=4;k+#eF9SbhYDI0y&F`lDYD?l}eeJQwl7K)Sfoelr!{OBKz`7zn0t7FUVpeNXt+FJ z(VtnB=ly}{f~DZz5S zq~5%xzR-RKXD0R9Z`PA>P8~#!rIEc#j&`Dn{Nw%|AfNF)DU0TDAI~3@{**%!trquT zD|41L^0VB|kM$OeS;L+mb{ZY#(NjX-x$qR+Epnp{z6^O=D&9}sNwR5Fva3(d$8M;i zksYV>YU#ZdIdiiLJ0$bEX7x*3>r#f=f)`3MEa!rw$mgXU&s~=IT#wdotX|pWcApSL zxs_`kQ0zZyw3u32&z-lm%xyR8T+(UvadK)wwB*hmI^a~NJ4TJYu&yhOVJ2LC?cEJ} z7^zTh!Po%jG1g2hXGTSSRI33$_gkqaDgEYig7|tQml3(cpL4e(be+ zT=lpSsZ$Uoob|6M^%y%?Rolh^PZyjik+SX;*Ng^GoP3}-_dyQL7~(1I01x`CI(ms+ zjE&b;?Lqm$wWtFv zA?6sE7*ndMEb0-O^JV}OM=gWfc$krAo2V0G`3rG^`J~JS2!R2!VRE7Jk~%amS$lk# z|L0-1JF-Go5x@fl3B?PKpNMJz!?YI)2l1UlR7}v55$`dWfhJ|fQSfeEAni4XM37W748W$3-Kr)ftDV~wwlc2vWe_E!nn+*m>--YM zMPg)RZunGB*)?u@1a3h>7mEC#&D#g-2c|Xt^LiMdq1lj}sjNW*f z=uB|2HG&;6IP6kT{R*G_R(AyKpkCGy6Ud4Op$b@+ys5ZM`EQK$gHKx7^SzBz0j%zrf2Y!;9t0U8S*eZ%1ykQLg2CdDPeZxFqxGi?oB_t&d`7!$7o{OH zDC;%1Iit6%Oj*Y3(fm#+qg)^xtuaOlFi^!R-FDvAUa9N98gZ;#kYEj;{VZZT^%28b zY8TK#C?WCn`w($rXc4zD^EALxc+na*rT)GAa!}fM%*Hdo);^PMGKCHI^9U~F{01v% zoyZnT^tu6CR&Br*be{(S$rkipmmRAaL`mp80pOjA2p<`s{7gg#Y7zlQxXOOucwv|E zLgj%Kv*CK-fzAX&zT0#~;xm^F3O;OkyI_*7z%!^#P=UP@7E!(-RnvBNuo(CC@MK>lBwu3RiyEq1IdUzURAcj}WLsG;?MtkogkHr`*DC4|-xb43aHiDDmn0Ps!#*d0 zpi+IuJNHSr`0>=5RK)QIG_y2_j~$qktR%Hjfx4e)OHqlBY4TT9_z z^~d-K_Nl&uJuwssvz9&oNSVeQibpj&nWpK#j!(h*zboi+(um8DoYchR45GDwB-SFqR5@1&_?2GsTD(gVqvehaK)q5Un+cV!+a?S zcwlhHuchxm9gOR-nyv3ZrM5-*7rK4&qs&JfWn)+JdDjOM7CDAtm%9K#m@Jua{9;`s zQd>gwzdD{bE#AII;jV24>6sfoP*CKI?HC4|@VsAzojpBA#tRx@ndn56Vq8wxN39I0B={ zcF4hl{au-qsxlDtF2oN2z9b7(VOh$CE3;Sr1#J>|u(C&c4mFnBK+xC=%M)wM*SHaC z{-NKg!6^Bms9z;X)H{~Kz93a;`+jK$A5M&W)tHUciXE9xwphg*oy<%13zF1<$7tB` zCxO0ia}Aln^DQ}bvH*FkG=ZwKNYZK5wDXl1tEyxlLDnl3Jw68@6Yc7^Nxq6jv!i^> z=sSTD{`h4d@cDhsDz`dfg~$SAP4a`D=I3obUGXY!r+?G_oPVv&UAS6D|2nBWpR0T_ zWk7}?$9{a`cf{-CZO48n_u)|XX7Yq>j7WIGJJsmTMLRfNA-*x2>*Km0bBlNzFX&Pdx?FO z)$~DCZq1ftu|Bts$ssaJCVIMZ6zmQKxcT~{v1_8T^K5t(b#@8WJ6~;)%!y?qzv?u( zm(0`LjYrtVrXB+V?f-D~j?rN~akp@6r?Ju4Nz>T2Z6}TG6EwDM+eu^FP8!>`Z=dJC z)?M#=znnRBwSl#$j(KjwZHQ-?3TBSs(9g=gAafu+zgAt1B$;Z^pe81}5`kf^T z28YgWSJXeGe^f?}uQO~D`Za84JQ@`IclA_Tg{CVUgs-lJtNb!XyU38FW*zruB^1A^ z-KS+zTVtCXwl07KXhL?SA6uPJS^*x?fCQ_Zyg2ktT(Tl@5A8DAZU4^Ga@a!E&ZJE` z3sF&v1-~K8%aR0%YRSh4N@-Qpdvb@(@j`p)VGAc5gxm?+ycX*tqA$uY3u$6#NVc!% z`*f1f%%is-an<)AtZaTec}*-)f9rmOP<8f4$J(k+8H0L+tsv1~IKjG2!>O)n+j%tF zA%`(zpJZolXEiGH1AAOXLCoKn3n zo=Fj zvzMQx_nsX!`rwVX;U9@bvjQOyFj~i*B2{d>0h0l8jtDYevP%)-~e z^X%v6YX-JTy}?ICkW`0}5|%>PqRJ^4%}u@ZMIIV$+k!8)M$=I4oGfe+7!8&$enph3 zmD>RXS=NH)DFoTgoV07?f}LGJ9=QDg+|Lb==$Z*G$yX75qb?(hkS{lBBUbZtredG<~zefA9japaAqWpa&#OzBiSM$ zXB~|a;*jN85x`M>H}|XPQvRaoY8ZN}S66^Pd5mZRbSoyMQ~k@0h|qK53o$G=yWP3PUG|o072^UUGP{}MtTj&D!tou_9XA5{;)rMbFaS8 z{HbS{%#iax1Ip*?v<x2SNA~!kW0qm zv1Q-A{bat0AC*CfZrGzbWxdVf?xa`Skvzp?wQz`GPbwrYR4?X$I!rVFF86SN4n2H& zl#KQi68Pyx*^+p=qP~8GB#JU!7ZpaFZTIT-P0;)54p+)TAMn3OJCbhKfm7)Y6^a`# z@S%?x&{Oh_QRudN`T>3K;MOD!%$PePA0yx6_&^X74{dDsXndr;{xQbwkhGuMBZvOD zC*2|c1GBMCT)T}G=$+mD!{LYVNpPn6Gojb`j_q_bFryF7d=SK6i@r0svF*i;iK-xX)tKTAQFI# z5th@7)N^7wgRraK1wFgA&b&UO8}!9m8KD*XQ45FvtEf;7Rfz}QBUp?ZsY4zuBfc)Q z$oc*4MxDx675E|;YM{vmPL}Dnty{RFzW%hdgco!=@vkKGnmb&kZ8gaK0^Gi4FP{}z z*|hOW9%8geer35chmmg>QQZzMsC&x@6&b!_^_2unupr5Rj*5&hwp>JJSkwlr;v!nr zBJXCe6fKSPlQ1h$8xd(En+{et<;ABVXnoaUl)C;*@*AWa6fiX7p7BJXMX5q`+-dpL zq}{dunT(;q&aM`&T|C`3BheYTZ_ckXC`2&0RPa}Ds5!;8%;3cSYWw>Bqj!8K1=0tW z7a)imvDksOnn=x+`PbzRv(JZzkzG?>f&f`ydUD<#6gihm{tcE?PGj^$`H(Q$;78L& zUC2sRchl5)LAQA%hL)otX$?lSqGuC8+^AlJHgLLPbA){J@s^MxzWdTUI{w6uAF&(A zYT(4?k1q?U8uv$&xn1#-y%%%4bj5D@54!lEuXeM8%D0izz`Dr3@e%Fw(3AxqSPr0L zw)`C8?|I5EObd9vaS7J9kF$iFxsi{@f*=00kcz|noxFTJynLi$2aK+kCf5EL0yAup z!xcSWN?K%C!fyEoD>b8)VAK@>TD-HXW|Qz=Pxfs%%^==~4*9c#8r@lgFfjm@)6|wmg_GKt zH%EN~8n9MxsMgii74Q;Nn{`Cx)v)6P_Z#VK=H#%cXNmojw5bU#HP2oCh{%5A-sr39 z5o@@#TbOCQ*2kHxwo$470M1|#ov^zMRhRLNQr+Zr@c4*JHvy6Nc)Mdu>;;$6f!*|= zL^7=cCtHuPj#sB}xbP_#=>LAdY&C1t@F?KX1H2Th?HmH!{8VkZ8;Y=c4#A1>x5eciC zPd7bhoXh|br*d!WEL79xDQ74#NUi5G2&~e!HS0EUY#j#oTiSW6@uprLMN|F=eV;`~ zidyIqL)7t)^FY$PuJm#3q2gvk@%5u(dg(ElLz=L#A$o$}xxCKcRVDra5j(va?XgY( z#m;G35({{e@HdZDbnNZr5|aesQ}#hB9a8H4Et+oVFvsS?O8WHBMKFvsuVq*K1SnH9 z&w9;yhbjf9wjPd&8>c}aWQY4p&oQ6$gnt{J6P6N%Pe~jY3}@G#G0V**{ackDm3F;n zIVD!6$Ditg>h5) z;==uvN4>DsE+UO_F^J>!Wth4SGWoXfH1va(qEHFDmp9anIT4LL-%4QFVIouU%Z8t^!4?&W@NYANz%Y2YIzb(4G+OKG9QiS6t**jo2>LTE*C-lt z(Fk~AHTOs1`#T+xdLy$xPoW~*t~U9VQ6h0pMMo(cB6V@EiK-Af)W? zg&GnQ5%(gV968$=4z-E9kN`SfE4#)cna@dyt~!@dn<`pXX(Z4~8whA-7+g(kM4IE@ z%wxwQ!{W&k$1hEKu8SS7&=DFXUj@E*CO-ObEKHM#(A5RS&V~IUBQl{f#$`8D;*?wM zhxnLhAJe%uWm*dUr4io;rcLg3Aa#(Cl^q2J8kPMMGQA-f0(VOPxB@JA)7WAO3QUq6 z&p8!+JNF;FOP77ui>@*@&kK~hANmB{>ua|5lk@!Cgqa7NlZAJU*-E#I-p!vgZ^7l3 zezrbdn=`#I%S6k2h$W5g8n-t}-Ga)f^tM_thsp={@Mm4`w|}fsSpWFKJH1a4ju*rP zuzGNPWQ~_m9iQzEMtuK#yM25t0YLxfnWbw8Fa3l70og+Re*`&FxG~_kQhJ;*Ab=6a zk8FKrwOjva>hMBSNi{xe6X|HxI=bcXF1HpnZR${b$xulFERcth>MyTDP(ODBA}3D} zZan#mzu!ciaPK%a=I4E0TlkwVJN8}A>}jKixLK!>T|d{_pIoDh-yM!DSWZTBn%lIO zKNDlJFaJCnyiP43yLY%euMwRt4g)Xe;o{mMftSfYcf$P_U z>sQfp$-!mt(#B*>@n`Cd0iW^i%?i=4HvFYFZ_Bms=r+#2-kVLAR#+#e&%pk%hWFt> zSG&4|8zsQ~!cl)|HQiiMbJqUM`!?0Gt1tSw$aB-bJ<*<^tJ3vqe^rraaWDqpO_}Lk zr>uc2@oLoktEFIx!6p4wZsNPE^-#67@|z{GkypERES#WJTF&gcz;mxk|(-Uet5_vT)I zcm)Jb7;diye>TATgZCoholRXpzy2t4D%0y26$uFTnGW>bbKN6hc|V-%q@?pHxBWv(7h2z1y3XME%^OkWv-m4p6qSJD{b=@dMdpb@M zr*B)$hWd2M9bftkU>-~xue!UF$C}ROHO?v4k;{8VBV>;GzC&&jh6Nb<5~GASoY`|B z678#7+?`+Fvixb>S`fyjNNK{_B^l7)MShVQ-AKE3$A1~q^Y(2ujmZ~=5tXHHjp~EO zyoNTdIa0Hx%nCX3v!1D|_4Ziznu(8j-E)|h`26BnasyAij#yiBK% zOrtKPL~7f@itei$jp1vvGt&Bt@}}Z0xI*n21cov&OqNjuln52GJk7PRzQLl-!>W`g zDA35rgRB&S6L`30t+WI+sdL||M025E$`*no?L~9#ml_9ska6^G8?~>G710scE)aU6 z*}R=wd$AZ^ZB3ia*g6`qjURsYG)S}On>MJ^wadwv7{1hT+~kYkT(6Q&G>5$+8Zmd1 z{+mmc;UJWW%y($@2kq4jtRozP_Yy%BOQCm&EWFn zUd4f~Y)1e6^;vEo^E>m@uX;EBT>i+*#9%<~$V<-N?%?E|3(oxc#d{hSL2c>?d>Q)Q zhtkaXz>lvqa|RkI`uOdVftHmT*8KissOI~)xpSW9<>2^tN@uSdyw=|fq-xPeR_K5# z(y=uqtSDH@(;N+v-U;N<-@E*S_Gb5p&%Y3%NaI&P`>O-~1Ou=I= z-X^_fpRz1|=a1noIVZ1Z)DCg|OGapLfBjK1M)Xhnw}GXh`K6(#DGW_>))N*_RbELV zXiC7*|8AFGkCbWXv(yzf#$|uF?grHS+m|AFCAn;l8PNRHl zdDp94{&u|l6a8YAq)!K+6#{T0Nx%l|NT*2FKap5d8iqapV4P*U#9MU93FE56jkeL0 z%$Q+zU|Zx7Q{)&EWT&P}QKLRw?(0Ly=leK1DV94hPLD&h1z%Jo zrCRHtX;84vAe+D!VWUy%#S4b1z*%xV*>$rrwuO;sqc%seT9S7vt~a*hQytKP$t*Cdl-V0D6H^V^ovuI@gKk*h!dy@K1KjoAyieA#>s#(try2@wT+50VzDan6^5a&59Cip?o-Jbd{uc0Y&1UUxkzyGAQAxvtr)IqohRr`Jp zrn0UQasJanx~Bwe(Zj>vEFcln;k3BT^R#|F$TjYF+{{Sl?8)kA`(4g-v{*qx4l2Je znK*nuRV$x1c3Y2u;#Glj#rpOBB>H~P&}biN_Cx`(b~s21GDIrKw9=hIXq&Bk)t4V}Z`zhKKS~dAci(P3W0z$5iKWq!}hi*KllHM$1lz0JqXYAxr5|=QI7l zE97vfM4Fi|lm2;4n~M4AQ>>1CWhmD~UD~TttHCX>9IL}*Fm{vfE0({mn%_%vMA0{VUn#XXJyz^$7%N3PBt@IC zJ}Q?l-KJOvbC3ej>K1WWD~fFI(eR;Bf5?_vPa<2cbNL?`{7H zOj`h;GK$0*VADD{9qs!$og8lA{Tb>4Ww?7Y8j>(8c_$|{toQMO$i5uoMTNDz5foRr zY}aF3h`(s($8NmT+K0>V*^~N~*O@jYYzSp_fFWfhIQmIGoKf)#XWx+-PwMq4gW#Q> z8%Ty`vECt!&xM9|N-HqTYyN<-Eu2+d)58T61ufX-W*C*m(QIYsLb?5|m;{fT-|l+d zZJlAPN6QYE-!#c9+=W)RzDYIiT45{b#0qPm$tfjLio5&$;|A~LbuxkU`Rti^l1Pt) zJZCZ>u`>t*fd?|^w;7T= zLJgjfNV_=*$v$H~4BWegrEe$o-~+gM>K!9d(P3yE%ANsB<2sF1XD3aJr))=7*l}@W zLdE^{P$n=o#fAR;37zeZP*cySS&1yfYt{xRX2Z8vC4@-@0L;bc9}#S>Pd@_ZEmGC|Ed4NIVh%LhC;%c%> ztWnf3A6+m_g0p72%ZsE|l&8d#7=@s=15(eB1>s(85BU5LcF=RPpCQA~jTCD*L?4D` z2y1EvC`sv7YvFG>p#SEU=k0#4nDz7_`Te>++!)c20G;CX6Gh|LC#*%LAHj?&ccucl z_lW|C8}z8(!QFX;D1hZO|G-=-oGC#+XnG4IuHP>8^K+tRWsMC`NJ|%)j$DoV|;y|rl2s(MjuRhWh0b&e^lUdaABXXG>hC#fSL&I0Gi`jcmhEE-zN@v4f zZwig$picc6zWqMt)saoD`nX{tZSG=QR!|zkee!PW zhd6K)I+lUg`20x&+!2RU)|_7`-{85TUvHATz0WpD8r;wkb3DC&LzQ|z$84r`9uGVaMDlqVphFsR@z}mpk{1dipN#nv!CP& zcGy0#I4>s(@p_dPw!H97x#0W1$w<6MWS=b{UL5a?JxU!{Z>b{U#nRjQoiDfYAm~=* z<^n8Cd1{lq$hygBQ+=p}S^wv}7v99Zo?)>|Gb6|HpHDr$Rj!;)+0M;#@BYh5vqS9? zAn#6gY=U{ZMUD^xDmgKBe%*U-FzMG_XKGU!5#@1a+`2w+H~73h&Odh(Z+Fj^sTT=E z^LbljP?xb;D#iXSl$6vql^dg+Y!s&~`xDsZkuYUKL6mamMg4a_W}{~9bEYk(I zeePD1|I6Lc`~KG&zI2o`T$o?@Gkt8NrNzZ~ODq|( zPZfy8Z>olEtrMaGN9oRy%o7izTXKBSejrp@MOS7NxJR{Grq;T=d3Xs!cB;*iM8DWA zE8;RwKtPSR+@TQBvTt~9*g8bp}`n#`#m z*R;y-W8vktx^z3$6=yS23>GBqHo9Eux)8DCeCRtg2qo+AsYFB}y`+P(R6$K;rY@S9 z!M1o_xgxgXob2S{=?O&sO82#(YA6&Letp`!miik}q|-U&8o4g>ySbm96se8h!sGXs z`aG3;sbDUllj*bC(kPlo#ZDc8v-kJ;!3Oi`mE+`;V3rOuLh1b>LN7rSit}(*zIN&C zC6U8a(Gup6F^uAio?X(j!fCJx>dO~htWo1*c=l42KmDf%HZd%z!mb;}c&`p)g65Y2 zN@m7!Hg0k5qdZ;i>AFGlh(^1Jjk;c?#S9k@M?>*FdbaUPpyY|zpFbot6E11*(=7#qS1Lm zPE)&IUpwFF?R7Kx%gI!Aey4eHmDxpfRt4(l;KV@(enwmA*>dN>A|%6>un6{rM@}fdF8#;jwx@EKMEzK zzMukztAWzHPF%=7K~Q>F+mg?xoi|^8@p{(LmRD5a9h9wOU!IBgtDlfaZN%uEhe8rg zQg?Bx<;HYHvx+U&gid+tmxq!%aAfp=9?;BsEL^ranL`28m4=OBk2)_4`0Ttqj3!PG zK;JQ+w8XJ4D}8Enu4(W!)e`Wj5#kr%=gtMIg>+X<{P2U$^>|fyGYCso8XAL_;56PP zk94Q38p8wpF_F*9^aV7gGi11={McJJD=HobBiNn(q?bv_Gf>dW6MdmlOvrme^2es; zF~wlb;?G7JLI+BfFKjEoU~7h)n9>euOtJ0B6%U?BUnJUhZ1BA_pQiY#n`yO zP|)58B1UsZsqy5mGsLzd$^#hd*i96NfBfO>XIg|}`7@b-Xm=P$9rWMfiE8`ViPr|n z!;mF1hGWB(TeifbVor1|QQ5OXb5cEa1I2Aex;~;ApL*ww5;83&bEZBP!C{8fQ|5m} z{|o_vDoQaDg5q$g(pXFEc#UEPTVjb)@Srr()-#Rg@Ap-o#QP6@u*WIljw1^#?3PD0 z{h^kFt=H~mHN!3~_;>mpe!=0+_CF()Z>q3%VF!r7eR3}?n^ZUWr=y^+*m2JM?djg9 z{=jab@E#wCI&5|cu1CN>ff9ZMD15ejdo~A%_Kmh6zhBqDY@}P;Wi=t&+wL`Sr!zg) z!K6hY_PR#-(7hLPDx<^pU%Mrgs#?u6blu%s-V3FE)hbnj-e zgIkg=^cCg;Ip=QQ`MU|_`PF6n=P_&D-UlHFQn_P0d=9oy&*6f*eOIcg%GtEF)$K3f zW)H9SZ*_6)Y`of5n&^EEU?x~yrS}MW%6Nji;=YDsjDAGZ*b0g}XD``Dt#Q(x#eWNC zYUp3lf`>F&eyLDFT;Q97ui-Dl5(0@=IGe=TRQDb`~s>!A_v zYa0Zb5HmmBEyWp_}wQtD?Vi6AC$5su@EGbc$Xvy2v z3CR)#e2IzauSqOP?ni~8Im3Zbt6~}q7#>Z zC2v{hR*i5T%{B%;M{nh$g<8DkCE>*etNWWYoJYKMltDW2HYzr~(VK~Dt3KwJS;$S`2SeRQ zrZ{=SUFMkXtVvgK+XwdX)4uAkA6%9L5!LH4y zc@;KeWRz%IDG0@@=v~w1BmdH;80ADf4`Q)yTKXC_m7VZmU*4Vfy^K2^Y)_ltBg-=} zKN4+bLXyTjTE+HY681yd@@`>tMwp;~E9ZGEw>8yMoy<-1q3H^BE3`j?JKRgel~}Vd z3LJM+A>NZ2xNwbmd;up`iY*`|x0oP$eAV@3|Ee%`8YU}M@yzn$*#{BMYNNwsSPo!U zFV47!5S^?ztSHQR$GZyEV~KJMk3}UcCo~%1$gL*&9f^-uEqbJTl`GU4zfXl^hB(M~ z2E1M+$AZERiM0-rCF;#;c(lo5nVw_onja$7qY)F; zG&sNqehQJ3sKs<5U;P0Q!gQ);nr%mIW{l`(a)&~L6^44!vMZR_BhY*fFci}D2fF-Ym4dp0{tL^{~h# zh{fNs%4BoHTPhDMF>}0H zPi~3=jbuS)I1Gm$c<`fz^IpO z>v&eJ3iVSQu0b~B8#+O3YjaLw7KXU3>tjxLxM5f(T-b{eEFO=zsvt~vR(2*yt^B1} z#8FzivZ(~#3sGs4Z)YeMcVbC!_zjAcJ#4z1y}zyQawT;N9JCf3=zXFo;t-FjEg)9y zPvN-gXHS8uKSJys>u>?q{HIlwV$H@`fryHN3iF&YBgIaA^Ntg;z1UF$`AEiPGqQcy zQ);safxp4Qv4WVf&M}b0a%FENBg?`3>JGzzS{k}D1M6>cLNEhNED@^2$=@%4xtZ^u zaRT5tZ=A52xN%o#AdVSdsfG(JGXoCd9wy(moYU@MId7?zx>f9%gj z=LQpbv{|&D1DH`j4a9$J9!U;;jNJ~43eeR`#~Z+hZ~`4 z1K5C?Nd$FzB_TS@uY+XFvH;caoU(v_Eeluz5^Oox9nvItO3x8o0v7vlXt!-k`TJTO zC}^@dicq6>q(@?_>Ay2*c>P-a)8HGn9D@C)=(Ko2=bJ~!aBT2pp@b1v&l)g4)u=-^ z7QR0P@teYA98vj#>xGP0p-o`zD94ioK&SxDav@mo8~d_*3RI=;gp!oSiHc&~#d{?~ zQ!#^7TVBeeVbs1*rmkWk#YOk%)XN%tf^>yXMOY0kXwX=HL#K8GhV^hu0`Y7_%pL5@ zqU^z-1@H{%;6Yr(?>?1dpA9|`pHhguVQTaJIq3ViD6O)YQ9=~&7fjXfL_`muUq67~ zl4Yxb1GJD@te23?-0PQq5~9R97W>EY+a|f-!Qf(0KXG1daI1;s!Gv07gXi3A{-+Jc^ipvkmz?k=6_akhP{I#>6Q8)=`pt8=?XFv-*i>*-oXb2vu6a@ zkYfk5&EtCOR5We4XjP>r-eJxEx^M)0Hk3DGZOSb~==4PxtWJea$TWls-O3A%duH97 zzpTnWFQ0NnTp#DgPU#l+4cK4NuBesTDmnTM-J)iFW=3j$57mM8P1Ax6=MgxqU2^-s zJ;7LrC72eGfJ8BZ*dFR*PNNFy94s0s6ME^{YH(T0EyzJR#@U30$8UI9*;yUjUoYnt zY+Ns^$uj!-xulV=k7cj)2kVSZdy+i975rg1rS=NGXuKpJaVy3L^W`#fvvDQ9R4AmS zjYs2EdUocdz7>^qfZlDYz!`}AVTvpZ0zYjy^-EyT;h|?2dB}AE5v2pP5mIr*Gihhy8B(-0#2B;S=lrSTd4hlb_^j0yGxfndQwZ2Nq_@2q(}M>6_K zp{nZ?v>>rbUu19H|4P3w;#!k$!tntG})>$jLM*5ts-8!qL#VhyHL`$Cd64eOT;Otr>{4D zxk^;dehKt0kOVm!^2k1c8A8npia+14}JrhW~%hIo>4M& zhnWT|Q0obal&Gp5V}0CcT}EgQQ zpby@-YZ7Xs51$x{BuilTe`^hMN2A#T*Uqb*uy2wp#7@;JOgdTH1 zBnc-o9yyLg9GFc7IyJb-m`7&Txkmy2p-6A9ayaF!`bFuyY6Zi7(ok3hJkpB!uwUAU z8;+fMSL#hMO&wvC<4QAcbnu7s24Ctw8pJx!A@J`Z|HDAPW=^KkV25QBOh z5J5)Ff-0ytN;&k1vE^)!=*t+%sQWF>%8$}Fcpe_p8TqEpX`_^ke3R3q^o|Lz;VeD| zxTuLMhsqJ{W$I3h;&Q|;~*vaPak6prNJZUx_+ zh*U-iLxo@6@BTo~VYcApB0Hc$G!3$?WL-JoPl=uhh3_9jrufvjVAQ1b8*Ng(SH%z-5^0|kWW2=~D%+LOE!5;YXZYa8VD-_a zSlyCztMY`hV9T-$W@C(=oas_|N7?>(VPghTLYuSnDN0NiKAB)BMxzO z@uUWlH_Ooz&zsdF8Y9>~2~UsXF=5F8y>icbYKJ_3rYUG;?Mu87%{h4GMT{7j(K8vm zANyq3+f5Y_i1ujjX(hl?@(U!>RWAsmd#8yk0DTz!OUkiM zl?MU*hyjX6z4b2*!@s9_n92Uaq=zL(w(8gfTcHEtQF3lvB!03f1$4ZI{Rc?gP3Gxe z>oC^$CZfU7Af972xf}3+41c}vofNyH0Ye3N??^cZ-2)iBUR=L0+zHgSU5;_}PQsR6Y^i$AV!>)`Cc<&HWBbb8*&+jOo8AiD0QXKd>3 zgO;SqH5kd%fqc!q1sUy#_TZ)Y) zxp89sM+gL`s`_`zTMe|CheH)5GtSRwOEd#uT#06R@?s-sF&_J3-;0ZfK-W}!(#E~>{@OR8+R z6QuYvXw}_hR}j3C+IIeCJZO(6>t-iodN3=ng7P2#n4$E{_S+P^ncG(O31pWvkSO>f z0OeTzhrQg-(Y@cJZVC9CCMy)|wYGC3%ZxB3gc3hJb`ux3C01j3qf!fIWux8krbM;4 z{%D7g(i3D_FYdyw`-w&rnUWD`g1?Q)Iiq%LHC%b)Ro7s?y*{Kn)&X}f{V`~DOUQ-P z0v=2`%$xx*DLnO1{Qv6i|H|&iT2D|UK-Brg``+lyY|YY#W391Z&_a ziv3@ODd|=`wXF5%;`x?W;~9)^qh8J!4#-rTCOQ7rTab}*FB4XKi@uJQu-z+*6ufCI z9i{v7S3;_Bxd~RGOTVCxuml+P0QnP~?wk+ntsAP*q0)!b9(|XK7wSfhkxftMtpo#P zDglH*JcVb>`mw)M`@gn=e)w_n0p0kR$lGBY-)*KpE`AS>MiZ@1qT@&?@Hw6R#3yJi z0fSn0pVOO_|9c9ia9$8bF8yV+k@I6)Sl$$I`<2Cbs1QKXW?t?UkOlwwTyM10<7eO3qGB&c(!@#nBkDtGoSlHP467koc+H zlfDf?)EXX5nW?_jKzI2y7Z4lCO2U`%eEa$1+hG$h=}i!dS;~U=MuTlLs6(I78yby) zBVyiNXKt-M^m*^;NX*!>aNpO5#>n2McMwrjluskc`~k6)g`HP5H`-+P z(IiG!z(7Z4zlgc?TfS98V}}RzF;q&>#0|Ckso!H_K&|m|5y7~)323Ab?D6Clw-e8a z;ky^>j?8^95o5)IA3Kj`tt_<|!bCRQnxp^$sibazk8UfSh;HW6u_T4X`1pxLsbf|f za!MIyu)O2kS76JmqfiM$z>F6?d`Gp5?lsB|3Nky%>SD}lwzkI|23Dla-24&oJhsmi zOM(P;!X~xA*L+vA3jA|mL!C@_Lx1jBI;DUiU8W)08e>`bO8@zIcy|(F{CIhM-+z=N zzp{%(Yh;!zRR_CIMNJsAsbw2Zzu28&0AH&*!N-28#@s$_r7h}L`4`&~!6rr5DSOLo z05|TgKR;S9rG?Naf{I(2G7#6&@hWDb6U$d*z9P_5 zR5CB7FnKP+nyY0$P4;6dhd=u>UaWid$;?LxU3aT4L7y+HgCGlk++iG8Ne(a|v-FX9 zJCejkKJx$4NEN^eU^Dti)io0nJrG^5jdEZi$PRBWtnYmPzeXyRi2VK?6C`1SJQSXh+9eqgK#&GgC!K5tiB z5auQ<)gM3YJl~n4QdB-y+-;0zP`-7gy&xz&vvG91hiwMKS^ekeE8POe`5!SNq#Mpq z?LT4!2K?xM_gVbRP?*rd{z5n zNa#*)Iy(G}Zr%BE7EMtxU6^xJ)vuX&KA1Cwcw_cRqceuTKCvlE9o)IT$&8>nk@W_P z_jBaPMZC&aVkWd{NdZxLxC!4vj=k+M5vYy=?t^_zVXGu{xJ#I|kuZ5L6jjtUHg{ee zD|Re{C4 zR*c2c;;MswFsJ_$?vyM`3>aRen z9Vq0lZ$i6zN5ruXL#AVztd6=->t%F>_EPxS3R7as&z)V=)pg|&s~ZeG{{~0>m$uH9 zIkcH@^4=?YUsyVCbx#%xSYR_{2+^MD=vj#a-Ikc^y?|!yfKgBl`GzywhO?qo#%^(M z4U!XcmsPoz%%;f8_=jLA7*b>g0aqol?} ztTr|@E&z5f9jga-eZT2QboZP|L~ znY1T2RbAD?Z|2WqYRaucPzz7Uk(k~phykT*M% z9(~y1u2-A%$hfq|K4NZTr2@ca#8I%ce@r4O_7Sm+?tPG4<(h|>O6v8qA zPBox!652VJZ^qsF%Ot)Hwrcb$wJ0DDKZb=pN%0K?zhgS~fRVe;1o9qHe5GGcn>BkQ z>4t7O*^~jBWz0H&c37ub5oWw_Z@{PY-4YA==)k<7!XpfLzcB@A5Rum>-b~ODhh2&F z+|13{SWA=ZNJ4#xs6Y98E+BO(o3AP+Y6QUULkKCEkJ^A_u$m4=GQea#9X_ew*>U{I zb=Mi%&P`ps6GYDr48geWkLn^=qP+&?vJykbnO|s{Ew*(BD*%%kY>g4Xi5s+_Ml01` z?3+&^2eZV#M~0XBQ_zk!2O++=yJM)g^dW2IS3lHjx-J?QO$Im z(E#Lyb`D1Tpu3$%Uf;E@D}!;@!#p4npVaA_u-s{>0Inh34WbDRq;O`aJ8FSmQ4GCg z3D(_;>12|^bhdOGfv;5D5m;*(Z2I^})C5)75=oLe%CSM6D+)4hSMvXo6j z{sk?sG$EA$E|c#VK9qg|f60!*WJD%7{nmtVk;p}+ZJ!A}^qmSl2a3?s&7s4&@I^$^ zl$eSe?}tzaTh`Lo0_`>)EA@#Vr&V_7{c9dN3hCX(*1vIob#yI`YDz6DZ0J`JK5045 zy2B8*oz~MG9gx6R=XUVl#|i@`8J+xCsy-v>8LRhx+PngibuNyA3-4{IyD0~Ie6)PA zURR7h!drY(gqRP6(pGI;II*Wn%>Ct{bM(G1h~^L3^>5NY%D03avk&pS2*qBA{bNVS zT3DXRTmANfNO7rD(H0KecWeJtjh`%zz3GQO+i0CEzPzBKb8~lNBftY(ZPulM%Y0C# zbh;Vo?$w3j6ktsqGv-Tfd_(SEO}^*(eRz&OC$*cut_L+UtX5rljVZLJSWDh(u*->A z7NIkm=0r#`lKD-_R9E`Mk!ld8W48(l2Sr-Y`n)n6SwjU-og~sUX?2YdP(zuAV&A&x z*7pdGl@6`%8L9F**31FV_KoP>2Z#oz)H^d}J0Iz(7X3R5EMbF9Ct2rtZF^Ep*acJw zg?}Mcp4`bFgzP8mBm2kfJN$5~R@!n|I2LS!%{XBca^uV;w8la_lq*Fj=YUYJ7DN?A zD56iNhgR|Fgl>6C0`%pddk=#=(GqKp+48R%U(&rH53AZ!HXnd;ue|GcQ&I&e^vlet z*`zLRR^5a1Z=UNCJGchd?nA_#X|kU&q;8DKjHLS6;%P%1F6V=H^%41=sXcpFOoKL9 z_}Ku)0)Hu*{=>2+o$Ktc|2o?bSY@1qIis^5<@LDHAs8tzK+ z;eL~HRXs6~WY8{ek%AlTxks^%v|2RmY??Y-=2xRob8f$NJ#emVcjGvYzDQb3irbsJ z8-_Kti&(DSo3%fWEZ(}f z*sRC_`;F^5zblWn)x;FGYdrKMpaK2Y)Crx4e}-?#KlXki{r)POj?GU&Iv>6}d~?Ts z7?FSu+24{o8iZ^E)wkyv*UUaGsJIvfrjE8{s8*mgyK}BY&CL%FnY0Y ze^ULmUVp7W4-EaD!mRkf>3ELE=*gyOg^ZnD#(d#hbrPhwSR#QC!l-y3FB2!`x5cMo z;XrjzFdpcPx&o_m6Sf_8DkDF5TqTxgr#p816GBKGs6*GGc~9I*CcO>ByS8QK-%^{W<{0e>cEqSbZ}MXklp*V14;A=Ixg+Nr#_xUl5uw zarlBC68gZfpN(sCM);La>{I79iYDRP_4WJv`|j^Fx(?U}!Y*Tv^;_yr)*YK#>!JO* zdmD}2zl1ben@-k#w?Dt=3O*TL2Qj}a+lB45jh*>9*TG-53kUJR57{lm4uR$Re>bay zks;oE`7&Wo;#%I#)ViU>rFYb2OAy~_399{e##ScTp5KT+iI&3JLW-przEFaA)g`;h zrD;X0#Px?9a0NMGFkBzAbzc9S-KFc9pwZdnNHE`L(z#cu-a_~VDZ%@E3Ve;Bv$yFX-?FNZ3&r4#mKLW95$*vXB8M~3uaWCa4r z_+K9E4PK;&o-Z=L^FsEA0q4C{fu!tdQ?{@nWglP=8r|~0b)C=g%n}J86fgW~G?_+= z5owXM)UR``v6J!JZ@;N?TAjOzJ^M!ntUehrE>|C-&P~OJAXn^*BwyJNf6Bvc)VV^~ zga6G3xx5r3UHzNAyb|N9k5}`)_;>Mt>ttPwuRdPQYlDp;rWJoD@iji=tGup0X3ZPo z-+T$z*{rUvR<9ky)xXt8taAg@J@cQ^XR-St3Y_aH$Gby@PwdfoxZ--r8eic* zIXQ`9bv<=lyL%H@wo8k;e^vILf__z+!Ni^3uhtk_W`J3%-zq?UE zpaA7wO>Jr6-B%>_mJUCM(W6VN$KF}%ZPe49>W%FOH(j5}tG|yPf5h!NdWespbbWf= zUbp`WBvN{5EhO?!<>yN;u7%H6e!TS3TKM?cmM&rCMMKGzo~8R4`M&!xw^y&y{q6Va zoM<^2bpUJeJ}tcd8!`6Cb(V!|79VwFZ=^u9bZ_oT`?AvCW_+}LseT6KD#6mh$G$yv zX_yZFYYzMw$Meqyf4&?9bzZI|;i^Bij%*vyi63&+z@f-BTwAyuTX)oZ z&t3+?Ca@;#>FuKJmym<-iE13&FCh!z6V*AqubWYFUpJ!UzOJL> za!n0TZeQ0`Zl@vr#|2a6PFyP*`N0^lEWBtZU5@%b5y)6Zr-W`9qJsg)kv`NRvnokn0mm`uPZl%$xUW^n1M?>2JL4^>z={bx5Ug2aCp?d#_)ImfE{n*v0vf(DhxB zKOw?airbpJV`5(?OxWXLvwXn+Rk6QYn)|E#c(rX@fB91RfGV0hUy@Tg31}$vDjwpR zY>~R?qB!p25XObqq1rK+UNb?EP;WX;f9AA2c7zStpBqwL9DMiB!7BN1aCW{*4tGy~ zS|t}p@xSNCd&jF}Z?L=f;oyjUX7F)vbk5)SFgRx~_YaQtlvhN}fVMQKBc6V3Mt@Vm z=vnOdlVEdQ7*~G08k;-gi62D5FxPeb?!j?p1XwyTxd9FyneDaPJsVn{M+5b7e;bYx zP~-h%T0(-zY#iMK@6K`^`@KINGnuL08cTOq4HcFWbKu$ZL4y=E1gIc|NszTknZMf9 zjNExr#xx8WD|Zj$f7Mq(G5j(=_QVQ88gwt%H?aUG;x#~m8hYhPh^+8)_ndwEz|nee}8Ansx>B7a1)Z< z;AYC>!z7SsQyUYJ&l!IXY^ppw*QiFSP)?2cRQJ1x$^4k%@c$PPxrUHz)PoOpW_n2LCD=Y zcU&p}bTN5QRXsr^*2ktPN$E<3!>&gk5=jMEAY62+BW=$+x8zY;wFcy0iJV9h>utIU z<((1+)=suqt2wC(&=}=0V6|zM$e5||Ii#Kq37A04*qo4=f2t?m*@+ zOoJ6SQKqiQ`~r0p7s<9^>g$qiYeIRE2ed(pR(3LB%O($iGqr4o)SE&l9te+He7N%d zFL0G`D6g?f1wzF^gO&^jcXQ?gd2F4jg*vnDD5JsBSR@?W|BTJ{ZuLDVIX`*;-jLlw z9syWyG1Qj;f5T^WrDeNrqQJsOFVyz7)xc7DL$=jXuRsF+E}7dj*WsKrPK#EP(mF}N52J}p-n<--7u+t`GX zXeJDH(rI_f%1X7aH1A2?2Hhc5T8Vu2xTx5)Mj|g_e})T<+M>UlAY5onc&4Zl0Tk%^ zNg%~TP6{p?CW}$2XaMVj34_`?hMX8&D3q*FtWy9>0y;+Y)CoB$xHu?T5Q+K#tPTdi zkmevK00(8snv^sJ_4U}nFju{*-Htkz0)y1aF0COC*AL#_5ji(i$r?%6!qW-ke&X30 zr7&)Of0L`v2#?=RhCK44eSfMD-z+g6>eBEtmt`u0Xe9=UHp1rRdZ}L6{B96fk68Gw zQ6IX=sO%&%dS3)BRR%?yD2po%iUvk)BNSUcvKk&0MoyX-g=rN0dHM!Gh8k|EKVJ=` zponnQknD0qczSs?9jOfkgR7xUAs9T3j8?b)e;NqNF2td>5|j-EFGKM><=|!b00AM| zGm}{shDi9tx<40OV ze<2ar051cv*M&f(cz(isDYjztf=Jc{hWBdcQ@5XP$xT?ncmvCl8b2j8+o5K(|2=$z*$)9Hvm5<%ZUs4Y<9vNoXb zR0ar7+6jCFqN)?wAY1sj-xXi_q=Drue|y6Wwjg2H>?_8%e1PQ4Yon3lgT!UCFK0wL z-;KJWe`i=33@INO_mbpbe}v3gBj}NzfNb^W%wC~-} zkM84ehEC*mBR|&hxyFyBU4k*+j0n-)8j-t!m~M5{Q;gBBF+gn(;AU0*rVHokxc$D4 z>P>}8Ho~(Fm$QLZ+?n&C zFc47pZ751Ri2FnlYVz)r3kL`gS9I&4;;EwBE)meu$Y1^>^^jJeIVQAa>T<+fNNXHP zk2C<)(xMisk-Ur};F~osSxA<<9eoP$=j9IUeSAq|(Wc5v3HkW|Cl_ECe=ncia!nef zco1eCN=`A?3(7>m@x6fCPyGx7Zav7?1!WiH(=EnK)&dT%@mvB^uDs&modxwGXBLZF z&7IktAggm=)qzU=zyf|c$c+M-anb{8dBlk$lG(pDeIS%;D(c4<@ya1iNsR!5?D$GT zuz|A-RyN9=<-Ah3*gAc1fAn$p!@(Z=cW>|ue&hkC9&qH_iATWvc-fIBp>;>&5@_gY zN8EV8X$Oi{&YkvBa6NF+k$OnTNk7~DIJnx|J>R_=oSq(^;%6OjWp^XwM0S@K3QV~FXnf2^ZLOqWuE^OQQ| z0X(G!cr^y7Z2^D1Q(*zm>Z7kONVjXxKt8M0{*{}`zeGQiMZ4FqS-iCdC$U{~VM^#j z#9MTc`u<5>J2-mrL6K7BplxHD-A;^@sz&N^zRc7s^+9q2x=a zJjDy;iRbcv(F>)pci-rRQY`JGe4*%O@IQ?UMQ@|AWHqCfI^ecxA>v1NspXei&0Hr> zWyZYm@fDYj3uI86_q&P`ePaekKGd= zsoVmUu1SUte}~kg-6P*#9&v53a!p}i{@cKJyC1A;>NZ}qMn-`%=0eQDxGLsczUwfk z$;SWa(0gDF;L2MW4X*XbD^dT*u18>eb1h{|1ivEXlT|}sUy@y}e^}#*OL?NVMTXNb z^2a1O&SV;LQIX?Gl`~y(rj#S_&u^VD8#4ktq3 za);wGV7yUBO7)u7iXpk`&u^z03l@#L?>dv%rIQod!zlxT=+=tG@|jS<Uv?_tZc-6&ZAX2wbG;YLJ3X4(4@Th1Gi|b2qgGo|fDjHAHd%s}6 z>-yQ>WyPuD+8XToe}C(^c0fI-6$BXeo2M;L}E-w^pz~7IkYHIgm!J(1z9-ybe8O_Os zCPY&X2gw!o>nCCbHz8C82(u99e>kNZ9|Baq0LWs}`+G3Z@4V!+11r8at>qwrj20_*GkYor&orViUKU^G$V0O-~e|kYOs(BMt zvX5j4H8d&+Km3x)0y%Q%0O-zU!>c6E2a0_aI(&(}Hf<%oDQ_C*o7oZT z8LurA4TE{`v1k~ix?u99e;N(5Bn~DQEQ1HaAkD~9)h&}Jh?P0^3`B!~Wexe45V44m zdh%;3-tJh4`wWb-5-v1>5Fw4?;RRJlR0AG*mD`Ni89O^Nu}k)*5Wplnjp9DymsGn^ zRmo!A`u9-$3}&Y`7(j%_Pn|u65gm8Agf1e9T(3hpzh`whU;MB3epBI;s!Q(gg9qQTu75YhXdMRr9DRL$(ZTg9F z2^FXG1~RjnOOyLpexV~pyi0-`J4Y!T9VM9SoS9p#`e&6_^G`4TJdE3yw?FsD?-8XfZME0#={~M6Z zhDfSNH;R|!f53Ahc5OTVO*NcwNPBod{seN_uv-(zX3M+5oNP^Nq-;q>$1J`x5wm-D zXSq|#w2cW3qDRK1*G%&6l*F^{E#)b5vri!@Ntmy0eVy#ucHCo0ELB!!@BWs0={aPm z7=#gF{~ENH@K&a;m;h(lHcxH0=wCLH+hX^5C)%4qJ2VCenW;!@zA_vy?;b%#D>6DEkb9!+eMn zUaJz`BJ!eGZ9E|*6w)@F5PlX|hL zP8lA*HAh)az;`x#2 ze+Ee2J*K)7aYlJ4cS3Txa{Wjz)oEz@)8Yl- z#BpTw!HGIOWT!CPRTsUs)d3Y4L=7HIhKy}*SA>iuW{dS*+dj9#&&i2yF?1{;;45z; zl8;1+*gAIkVye#xinoXdo%P%;HQ`lnf3jn))QNPGYAlDe?ods!F1KeXF@y5>su36J zZ8Fp(i9#GhadKHKL;AX^K}K(m7NieV!E40HAyEy6k&F$r3n`54@Z!mSWVxJ(N?wr= z&~S4+pbZGZF{+t)iSAzNcB9KTiqT$0I~qSg$x-sjH6=`cpf*4QpkmEv$W9VDf9F3E zPdt^^?&jnz4~mkL1E^L=+Z`avA_kS>o_8`{UM;a!b?Y4obAe@rxrbLAheXlEumwp6 z%toIbgp>vikO4x)s#^6(25A_{fFLjg$$$_rApr22P2tQ^lE?#b{x4%+1!$8O3u>p) zJrEXFE7wwfVt^#%7&MY)jyu*Pf93Kq8&6W1YbZ?4DPpM)u4l$6%jez0!P(jF4}+`S zy}iNS)%ot(PfJZp@*cW)VqO6;8F0mW(^+oclAZ^RlsjQG5CeCaAi@5mvv8S?E)L%f zPOpyl#ZsNEmH~IE?MuFRm|du{sat=3B=b$(B->!NsasDaL#?W*TWW5Ye;Lo7O$|Dx z27_9^xx6(4Mg`>NS1$Ed()x2}vT=)p`pvFU)GcSJ*4Orp`;yId8?Bb&YHqQ-#G3IC zK~o*BaS0BvE*O&F5QD=a32vdN@a~`0VPo2@*|1Am(ad1-lI~Zfk*AmR9(8F%pWOn_ zZh>dFfQS*CF--M@N5CnekY=6M)56Io9TBEzHB^NfVe_SBTN&=1qtaZfCl5~U#3hB z2@Bd7^c}4Ag+9Kr)EA5_G2Q2N0hEqIeCJt2X1xT|Iz^ zj%Zuz7^R_Y0ai~#f7%u%9ZR*X6d8cFd~Hb1iUtIelJiDg$$8)Lo_0=;gi)G>I?a;M zSwrxzypJN}mDClaoAOGk-Chkl?2wC5wd!eE-zu|t;}SF?H7bHhUg;{$&xB7>w>)76 z1aT(|PF>u?BKF~^A7VwRx(yE=B;!H;xw0;%f1tG-bg^$ve|(P}g(Keh^&9ldmDaga zajL(BZ!XL`=K#I}1n(+QO)`kNYO3<*tHTxK6N8FaW#xO=O_ZwDMwl3L(IrgmvQs=m zX|5-pW6pKR9Y_A2s5A?;R{hmMAP!JmaT8_M#5wlT@O@ZtRQ=enj;f0au~eq`IRrUGT6>snJKgMBe; zDo`tWp*1yk2hU_{1eJig(&}uaSU$SO0JV*)uj?9D53S(ylQynC@yLYd%!qF(Gos85 z-&S5kX?FivC6n5)u0pm(%v@2jHEJJREH`37O2U{?17#$%6EqCiRTDlcE%Ph^0ICXv zRhuUtE1$8J?ynn@kGGTJUkhz=hr6dgUF{to4XUa_OGv`tY!23P=BBpt zB#`JF!!1qZ6>!vW&1eOjUR?!}dedj+(SY*!e_R3w)f6RqT<%adu0*z411C4L|MVg_ zbvOCB3QprPSSwX<4hKgU&t-7tZtB`)aGr1JuP6EJTgyAMuEQv>hEaBlp*L1Lo=M0t zxhRAP-b=&{S<1%BuFvdsY@wU5H?g82&|O{`NYrl1S}XVXB=93TWQ&~6x_Hecp%>k5 zf3`J{4H1j3hzEZ+bzGYUL=roc{0gy)fUKlR0+kDPxk=!1Cy@lril%lDsi0O&KF=q~B25n4Dz1vS!V+ zG0B)%rV0?(gIR5Br;SNQREJAoT1N8+jO4ySX=zBo19HMWDs#G!`UL_d#i?H)K#m(8 zm;hwDnMyvxU_=_2P%Y}3%70U5e?7%~Hj`$?*RN`t885u?bF$fUve|R8Sz;BO=Z9}A z-E3}t&k1MWPQsai!)r99inJ2cz45Xdf z)=u?qzy_(2+6D&^Xs5PeAxuIvoO)WxZCLn{q2xBbOtR(4ZAZuF)d_AUf9;2J09rG_ zO-=)5NUS^oM*8aj79%x;Gn(Mmuc@~FOx>YBes1&roa6Sia@$f5-neq%;x29I;jGe(;Buo33d~E{56Yab!U^9e-cEjF44^ z0-hHVA`aK!VMr(ZxT;fQv<24u8UKuM5N zVa^UHzl_ZV7@CmVAc<8`W}8z(O1Rs&I|7kQ)zGM*h!m$+sd&uuex0YXHMy zlT3&6WsHZZA^vjZk$tTl9rcJwIRAej0a_Ri(?owp3T>uTkge0)rJpa=6#F#LT7ZW(`ceYiB+(*R{)Bu{(E#A z`1c`^-jn2DRHTYHe<5R8@yV7Vt=mkJOgKN`c_9d=c$ubhhcC#|1ycu9&?zz}OR{}Q zk!kLCU4L{Ue(*Xuz^&BIB*bD0@;tE&Q0q{e$6bV6&^H`BA{&YOQxY5~C@HZb)(LqK z@{2S!nXL!1449YYPcpQk;VtRN)df=iy^} z)UpN3VbxgFZvDB@2Y1}`iw&)4FE>$ zbX#$tf6@Z2!o=O0Q9F^Ija25q>VqU!VyVo+&FXwZ2*1$%NTZoOR5k=KsRK^Gg3i0R zAV;i(iIXzQZ0qt>15C1*xjGTFNH{DM?TFv)jM_6qFJ3m$DKt-A>7((-s#7J5nX&J0 z`4)D~m z;ly>KPIkW`WZ|_$Qo|C{cT=J`fxq@D>(3amRF}x$89fCuDtfw`uw_fg@T_rhH8v13 zuqfIb8P|_MH*!3DHfL}I#>E3=GutLGDjpI$GrI2iGko}tpTI8t*VJ;u&gDw4MsaG% zf6n86zwq7>4mQq@kTVTO%b^vrWmq}CWbZ3mad2GZU*hiSTDINc7gwr|b~qcZCL079 zT5(tuCnTU2QhWkO!DI{epe?{rPfYf)0C=wezymDGiw{A;22?l+tBh9YH0UK3pr--H z#pE;$pwpn2D&1X|9UtVw$FsM3;0gI^y zQzm_sn{Vp*C@QgA<}PP&nl6x^wqR9Wc0drXsZfs_Q?ubB>ykFDw5 ztnW=Wkw1jGlTD-!N!`hH0u!{oqL@qBgiExk>Klq~)25SrAkVgLSC_Kb(YP-ZaYSjf zbt%oS(%fdm9a{2n&&-hg^1jOqf00ozU5=F|s*|KbJM-pTKhn#U8ct{le;v5-s=$Ta zcmEs!sYaL)tIASgBui(>a`STX=z8O}`r>+jI5;~8792Bn0Sk_q>G^^u){E|#XXH`7 z-m&wXec6BIol0ix3hjV)?qae7ye1{E17Lz;8_7G1cOWiFYHSZQ{FlW&xH!Ug0d!>o zyMQ5_d>8(A#FS6I2jR>Ae`#P7aIdCzdg}S{-Z7Ax3VJ$$ZNqRSjpH9koD_FBO9UN+$?Uy-e7l+SE&Pfa5R&pEg1-dO8I6` zZZi}+Asq4ihsX?XX!t{mTQc}KI07WAhFqkQfiMhQ#2hYV`jM%7e;xFt%J|~L;2hx! z3?YGC06P*&cVXmswizbC!$OMdzkhJF2YA~sSX5vAEe!nT#FnxmUmZUnp~ZX^3&|i2 zSFzY?r;5cEWOB^q_UIV-wsfjjn6YT8D?3$ZX7-s-0|d>0nmAK4yy^0E z5BYdH-LFM{jk7#9;4wbE(cU^1dcD$N^Ae^|`Y+N|YW!{uXQO7m>Y z4PZ=615OijVrE9PjyD+mi7bG3{~T2107wSJohapKgpuWjKY@43x?f@Y54mY6yB7pTvC2RHb!TPQtj2kiGZ>}C|A2z!z9 zEyk&`mn*#Ze*@Wg@oWDRur52=Zk23*vJP~Ne1sAV|HKZ(J{@3>a0_6YdxXo1R zk52{}IS=G|dJ~t^reOp`X5*O4s32AtPRC65W@m%De|^|LPOOOYKe5YxS3$=9prBqLGkxJf>@g+OrIOz;4sm>;b7A1tzYetCPX$!SNon zwD^Uf?t<-ujUoBhA{k+>@$?F zpyu62ian;A#Dg=CEz+=$G^Ts^k&LJXJHo?g1Rp^gg28m1sv!#o#KE_bIF>$GxDh~7 zAfX8v#dy8i1(lq&I*0S9meeT$vh-MKTIs+Sb|1TIv*Z-g9q2AEwAek=KI~>d* ze@d3R>>W>+9wEm}s$k|+M$%wzAYlk#ZpGZ68n^GK^nvgF<)xw6*cG**xInjF zFrT(q7b>bz+vAD1uR$Vnb$UfuMO(Lee<)$|y&^PPMHJ>n=mYzV9g3(ypo%TtIik=q zB45;6R8<9{h0IV=EBH*h6y_Sdn<(s5Lwqq&!zsDK8AgUtFdasIKt}BUn*4(pi!(t+ z==Mkan?KSf1ZyA>6OwuQQX)(c)K1d~q*Hv1F-0$7E{b%uRL6U@%yCE&ZP4Hwe@-Vf zC>E^-+S7myif^5;TXq8Dr~?>r)eCPbT40rr8(?gOiWNcFmN#sK@sSNuS;0yR_Gq%T zUaOq5rl@+dP2c~1d`E-8v8#NeMq0Kf$d*NH$3IlrT;!u`)#i-{PWy>puKfCa`04wQ zbgm!YlJCP8+-l7Qsnr^ zVpg3*Eh}q1ywM@Aom4Eq6pI57U~QEH&lz7+2z|g>O_Gj30#1^CEPrDfTmN!}yd|Ow z3($ncC@6j(uBQLZ0Fl$4fM6{3>Ea<^YWRl*38}ie{9ft+6JxM zPJLU}tl7k#q$z9g1x;C%`HTk4Sc{iod19kn%~TVd+OTawCNxNyE1S@CI9AJSRj{9F zQ32HkPCL-@5X*i3O_vIts=!QyJ@>UKKPn7g@6cto$s|HNhB-tbZv)*F?NV(Rq#y%j8|bEE z{%acMbZBb_?*RLfhH26i-f5U7wJP^CW|{uB|ocyNDlGZi59IauL*e9!vk@8ArfECV<=rE#oNo`j@jfnX%9lKxytSlb) z97k7S1pLzBb1j-50fQIpQLQp{K_)HCxtbSOvS53RZ^2-=Ozud>ufw)I6XwS%X+Sba z!x18YZ4fdqK@lQ{e_YBH_lXq}n;j9rT7#exV69OHpoBB;e8(nP6|ibPoIfI9RAx9m!)Hzqtz@~1PXeZ=QO8s;q)lH9P6ml-Cus?2 zrdQWyE;+dBpalB}C8J}xM+@!JBr!*G3@N}^&MaLSY9S%hd~%XxkcJILKyN$*LXiG< z3J{{<@qSzCvBL0d99U2&_lGjzBPhv583^uXeK~6BGMH(-MJQX$vuc<6u(8Njt$^ z+vW#0sTK=#?9!%SPn7bkON48j8ti zxX6sie>fElLz|+{7;?$$MX9*Fr(&YFgw5xnAP#YjJi4rFq`ENzNjxc}jAi$da5W4$ zDdHz8)*Ns}|0jEiWg#S3bKNKJEKaA^x}R7;K^iSV@5=``KD^Z`e*f8dtiv9V9l;=b z=$H<~3CfO*#2j2Zg2u7pfA@1NT<4b2P6nyNtCB&~P^t}=GvwKZ z9LvHD5t92`8r_P{=t+xju)#OvN6yS^so_zZ3Iw(QhQ*5r%wi!wW(swO_n#J1M+|CU zc1N=EJ(9at?PLS^i;b=Ld+x1QL&446(D`qu2Q85Bp>A(ebV|43jfR}wkdJxSw$qq@ ze{L}6jw}2QhCItz#q)@cGdiv*v1}W$+5>Lq9IO3m6bPY>9h4Vj=_09PFyg3YUzrS<*-qFYUL$?LNrQzoi~fTp zv6hRpkdqkiye8>0nBNdYZUtS|fUg)co5cvlzva`k#hn+>v42OCod9O8)x{`oe{5W0 zpAIL~$hEv>xU-Q|D%ny4PW4Hs;~#P@Z$b97lfdzk&Pn)9yrma-Q}pnu55L_`sLeJU zYEzmaw-k6$P0PE44z2JS&aowWI>LYmINHqz*USse+vY+imX7#@SF=B4B}?SR-D7{p3TKg%+0N=kl%;hZ@s z`3)wknUs>>X!J2RFD1Xha`e@uu$%MlRhQt#r1z@Hc<}%vRU@wY!6uf9=$--5ogH zZEo@NDeX;Ny*n7#j6M9^q^ve`rgT@-qf7MBUO{VoE zn@FBF-$YW~y4aEhf5u3TAADx9D(=!s>NpMUG{Xio<}^AenVRv6>X_DSrb(drz&-7P z?dn_FPT(HW%&~6eI-F~?Li!dLt%C`IviX5*dUeFoXp{%1?i*>8huQd+Hp-hdWh(cn z13EA@kj*byh5zJi{)RyWO!03JM4oK6zee{tIHJ#7_c_d8f6;XJIiT$P5`e4hJBM`L zYy;sGiwBtOG52b-%637=6PFDTt|u;p^Yo224H@Z}-?lZwKw-k7HG|(8bK9m&fl<4L zbOa5%MtOSem^5MvLVn{7i-wKE!P(jF4}+@@2Stsy5X&Z)-#k=zB zr)*yi2S*q4e@+$l0mSPK-ClDHnUZ#J^l|sY!QR#TWOnPES1R z&$qD@6y<`BA&M}!;N?mjQ(C4ec{imh?G*)4hWQ3Be^(+V?5A`wA&XHp3@A7FT7oW! z7R*a{xnfhx<`2r#L)Nb!$sg%&X5>X#^ji8mh*Zptc)3D(vu^T7{7*utsJZY512A6S zlnu?^irCsx&yHVaw2Qxj$i=*ld}VnKaryiu@8Ua+7>xuyJnW48kpwL9uvjlx#l;)dy1t z)*4b=dL{4eo)69s4s#M+5;smbW#`VAN1Spsv`YpL7Q5KlL5PX%v;RncqgO*eHe#Am znAG6o;OPA7WN>Nu%OF29tdOu(bQ<&HJ@!s)l zKL79k{9kf>d~){Pci)loTV6RN90txLHB~X_;`i6k^7!S+X2!&_=&=j!7F^$?&a4ut zP(HB(Q73MDOhP{h9#;ud_{jkm1>*N3^4at6$^ESrF%ge_8&k^*$=kJ#2wwrF3io`h ze>2sCqrJf|Iq&f7%Hf$re4iYT1eSM0ze9+}OMNaQe*fUZ;Ogl3{A&OBBEL=hj!Om2 zA|#zy;%1MHE8XaU0mgfNrSm6QLLuSi6zKTjX2xaHI@|p?;PAJ5H8?#zKAp|$!n3Z~ z%y>AUbw|ad_zRr;C)nb0oo^g_eteOue_u*~^{~d4?C$Li7|QLQ{WRN+A2?I6!;}EQ zT~h2%*gl0=^cLEaMlRLU!Qt`8xfvY!ysB4j0&&?K?I|>Jg&tiTz8jog9q)@toaJY6 zPagd#x#c|ZeJYVUUZz=NywS*gdANJ})79Q_-cEJo4C!~dJ&4m;XIqe}zSveYe{w&H zS#aDf&gA%~)rxtf$})MR5jLMjEOd7cY-~BUpuHHS;F8R@) z#5W(Mg4?Ydi|s<_`yM2aD3-G|f9d~uEstFdXvmJ#kcR7b4!vLBb1c`tdFMZLM-OAS z=<`Y5G2!!x)3W}?9!TzJ5IV8=`id#>eRfb*2=#_+%HB=-?#223+MCOjzr~4M6}IwM z4Z4P;k5`j7lDX$vT8$pMH`E`~D0u81cp;5KbfRifh?J6WNWHkLjLXT@PEQq>4GCo0RQM>1rAFp-+$5S0WybXMIRa&ld zSFhh}ZM^DlZVz7d-o&5$ z*|DSB$`4KgIx2kfb+0E-e}KF8)AtswKl>O%5id+XcN;~Mx9jW4$A|tn`Ek9!oqqJ~ z=wb1vImoT|FIT{ARTmWEwP(L}?SOjVut;!mHn!k#!gk-W({-`MHNdxkK4d#BK6kmY zj?xGkTLq07@0aNeC+sksIKyZfP)6^_iHgT_XGa_*_I}}rC2vohf8pn2?;Y3IvlGO- zBgCgNq`@6MckmLZTYKZ_uj`%DYvk24V2 z6#M4VQMSYJJ3)TaDCWo#A8p>!ZQP!72aEo#jqx@kGq8WSs+WCC?Y{W81cE z+qP|MW8aN!+qO5}*iJUd#o7c<@`O%kzAdSt3mH z2@88Z8d=!H4`S-Dr8=iE6@89r{J>fcOJ?4PKd2Y=<~7@|95BQelMY3cU2MGEJHLlI z#(4wv(kK7)M4j|!mOxaEXVa{Dg;i>YQ%{3G<*Yk3+ ze)ef`g)pVqUxD7aC2G|miSWidBN(L8(2U677`l;viPpsPBUJ_FET%7N+$I$>ipmX2 zfF2ww3RbjqDZoNu{{~s(tzWig0y-{)%}vG5fr?FJNF1;Zk(0g{Z09dms{kjpSr!GF zR*W@G5HcZ8ZK9nG(xI?0p$4XRy(XrgFi^m-YRRw6Ky2m0xzV92s1!dTpfF+CCe?=_ zf@#_9CRO`DqZ`eEB!-n)3Am|Afuf^H&DbU;Xvt6g9st-F@|5amC@$ogQ1PbFWLyF<}|Wj1lj%KMb}@QIMk1U zC9zXylK8Diwhf_tl4V*Wu~H?w=6JW=*F22z5Gh7C6WJE?)C-Z*?>qjJzn>BVsV#@YiwA5g;Z7LAqwNpuD=0Tl*FZO*q zwx~{{ZjlzTB%xs^#32gZT{`6b&=KLJb(3=4whv((a6Lq?%fi^IGs`)o;XIUaxw$F z$je~NAqyZ~w3m$*i!CO;R<4>}i1xD>uV}H0cW!&KPK}^hXtOiYO*IT8^RYFSl)KUh z!~x2$`G&+h=<>V2wbxZf^d6dim4vpP&S;Lvp3^z>nUA|zGS^rwj(V-zz~MCA%KIrd zS8Sa%UefY|9+m4susHc5)-Cme>bA z)3ZvM-E44^u(McwyR0XrG8T#Ssuici*@*VrjEj92>Jx6|btT3*DWa1V@X!V&_rM?L zmxqXmca-iYudi|CG@=6~&6xNab;Z3mSI4Ah4t!9JK)d`%5%tW(5C|w-v6Qo<0H!@Q z%__-AA;wpEW}~nt@v+G$Dn&&}!Dw*qmQt8uC+;-1VrAgen$QOy$Iac0jb*%8EL8(* z3b2GrtDFzpi`?soZ!l#e@4%<>412BLI}f{GottP%<;ZFklM`5(-0u#{)z0sC06|;3$dnlj7W@nPcvC z!MY6?6Sylh%|)YM2Tk&Cc0!a}1xBh!k<0Eep;3rI7AQgVz0ypE_hQ%F>Qv(l_L=;n zYGBi@Cl!3)&XKJaXch~=sT(3jjCIIuCKcq#?3kdH8x2CsDz0ff4&gH^-&uh)8>Wad z;2SC=_$yA)6M9P!!gs{yF2ZT2%Ti^aS7E-UDR;ixG$lR_bTu zC46j4Dx)@slK=7ES||q0&JP&fQ!1<~_Z)?%GR&vhTB(54&E^1L5Gy};2)Mr@ zk)Lu^Ogkx7J3&r6d4|n%hw3^21A8K<-em1@%e6bkAN|Hs9wh>!c?dz5TI~o!faVby>BnSTMUgjd?VMC#kXg)v*_HO8ehmk_o;WIqy z4$eNOT&V7E#}f*Z$Vih4xacjkGxKsmL;T-N{-CG&QZG}@sUUy4t!fbpc*VwyG)hAt18(_P z;sncO2CRu_S{{YWT9A?Qi-B&++ZKO@lDL2VSa8l~gbe;O+J;X1N;d;BfmR*4#Ld1l%zv zss<+;yTyc@GMS`8TRNZTkw=S291D7)8NHb05kwu6oDzUsWFM}>6ecI+$&XDNR~_2l zrPp=KQVDFE4O+;D$X*|fdMV>ZWI(=j#qrvmd;4tT2~|^sQ>fp0ui*v74u+!JQqZLq z+0Zi!(4iiFqd?CJXfHPgLu&r{P8*-%5bG049e)qfn7%_G3>g{zR_+}nibo18UyB>teAljW2 zlm&^hz)|^Nw7c_}@B%ON|JzRBBHa}m1Uy<(dGk8jvF7`0xx-*66Z6lK)2tZf=D`Vd zY)r^1Ogys|QTUbcRp0xb)t282$!f3}%K~ti10utH>``WUNAg00a|8~4lq~;!#~D6r zd;54dc@lkkPjgX_ygX<$-Wm-}F>vd!rRrWcE1M@&#Ij91PHoJym%)pZ27gBv1mKZw zwX80vL8cjcm&|$LY{tj8?1*LeFku-O#L|y+cJ22P+xFH|N;vZ8MflsgyX%n?c6a$^ zSiDrwcfD`YC3w{0c@b<<;x^->v&ylRcxIQ9+14U-(rKEOmL1#HnIU5WBAd+z1%w*CQen^}|(WVii;EshB}frn3`hGX0L){r+jz%qX;2m*=v?&97|I11DnMM#K>9pzboR`)jfa}c-X7)UeT;lU{*Ud| zxx$Y{DhmWOX9)_VBnt|L1_T8K1@uMtY-5&!EBz*Z{#AfGA^ML3I_wDN@J%1(^n@d1 z|4-AdfwPADuQb#S=T7=xNniu6`kP34u@Cq3O*1{hgOB(ojk*xShvWWd_rV9hjPPG+ zMHYVT+h1z{{2KUwT5=e?__y79A-o6Zf0{-qJPGQ5C7*Wq*>5|AUU=+p>Z#2MeEoNu z@vq_U$o{iKMMo%s{;$+YfI!0hUujzr;p)46^O^`a-*vA75E8$&;0T0X*8l7zx)Dmh zwW~n{5uX1vwoioAZ+}xzhzczKX#~88E8oX`5k@?q{!iPnMI8R_t4dcyWZD0;o?gU) zZ+|8uhy~wv5I2bA-x|X+VhH1ZcCD01E8kiIBhvJLwAD5fWh5Gy|Mte|BE^1_Ux^x# zc)$D4;5U-9!GC)f2#_hh+xJe1{7dFPt<4#^=G&j8H}VJXf0|V*veh>icHtMY$+s7- z5#-eGW6aGVe|-1VJSd9hw?8^~l#6c)EuH{M%=c%jmOufK`_ErPA_~v9cA1H?^xgNv zy(lx^-%kX*Q_&59%3;v5AO{`BWkB;=QqSdRU9zyY;RDKV=RbBmG)uMNgcmBzkQxM z!ZZ9`I5~%s+>07GDb9(xEyS0nyj%9%JO|ib_b#lTfBvf>wrgK?jAmg{`(c&8YCC>^ zZnyX`b~p4Zr>;=phd+%n9AIcgt5AkI)Wkk|DNU@;#6p$!7^TRV;g(b4ZkdmFXJ9GM z=8-n`sB1a<#y6JIm(ONoqRijygO4d_XWQx~0}^nJNr0&Cg8S$!gNZ`EWp!ib6@N&v zzhIy$X)4geb@b8~e2HQJ`VnR5^y0>rac3vKd0y5X>N&Zb*WA(71z7JihfQX&l^7{_ zRwD8WV@LoU-L`XU-~nx4DXTx(u&Kv<&Tfq(ey9Bz+FlUKd1lPK^oMwi zjD|vW3ri7vt&YsB3kzcC$a~8_CZ0nt-pp(}*6 z1&i|V;7VZaN_;j zJJY*YBUhHA<8@Vhu9mxe5Rm}WResx4Cyf?s1>G}&&AqTCW`2jwEM;;;9FI`(NCmoU z6|TD`=Y7@{JD|ba>9?DQ@5QiMNx|RDN+U91J!wi&a8nQxrxvGh^+EoK%T6q{g0~7A z%c!>u9dWo@ILZUp>lqPh)LH?!I#uU~Zu$1L-11I%0^uZ;J{cd(AhpH?6_Y%(pZd-k z8fdB(n7JyOzdE}b481y?a|p_7_1C6mv470nk+>%|f&i-UwPA#a^Idj}t2lyb#vz(; zak?~@c3sq_j_d|`R8loq%Sj8>Ba$DK!S#b+Aynnx2LhdIy6ehV{ofup_GTVQB^qq6 zY1ItHxe9l6sEpVo%#>=`64*jBt02`X_Wk|Z&=21HyP;3pjD>5scUHtFsU(mCEmi0Y zl-2spv;hd^ISeXXB(xgiCZ}6kQfzz~#4%o6hS_s1SxJ%U8QwYqYjR%w_q>@?IR z#a`wwrJe`XTpIbADl+)RNQoov$amCA4&A zwBwkA9N}NH@Lg9`8VDrm^*X=ovF-(qx_u$Zg+@}?WnsS{GyAnp|$Z}dpH$Ewx$bu@x&~dYMSBd8qEx?ig1BIV>upcqid?=RCv3% zZsc;mK7z96!F=c z!{DDKG(%c_^u_7k)FC>*j8vhuQdZB;Fa)y^8wiNBujH}AfRxJ|FJ${|KAD0 zhAS!^`G3PTTqbJscQ_d+KrQ+XS=Mu?uixR_;t%TTH%MIM0@dm}oYXv_f{XuGw}lT) z_D$4}6q?w#1EB@9 zqVGAwAryM+cZ2ef(3PqFiywDf=qv!OH3wWyB)=<7y2pm=zg>p+rCiogB-Vjq)<|q# zSc#&xs2lnE;LISOK9Y$S7UtTGn3qY-`*hq#lao76faH3ck-Gzza>}%$JMGTufy$br zrbBeP@xHjmA+8UQG<7=2&vz=+W-SDnzToQgs$e?B@h>>}*&{timGqij^)O&IdW?pm zA}MW}i%?r^persv`HM>(gN&E2F$}3wl2sUG6}6rk_{W zV{(JiyHjj*aB<$`)ln>sGx`7~nFebY+H}vFY)fXijav;k(+-+|A9UVU91lkA@@LW1 z)TC^?w2hh!A2g58XYvG_jRtth8?eH1@Qmn>WBdG?d1~M4AIj`;HdVQ~bzu|}!TSlu zg1V;wehtwKO$QX0QHEEzWI)t3X#}zcn#hG9%?D35&6CcwX4IXeCoW7~f(~QRh|zbD z9jFprc;w~8&os7|Zl)+F;m&k|Ko$~9Biex`x1Zo*f!3H`ZJ7-mL;#LP5x`1^89u`*tzCG&Kd#UdgYIlE(GX6Y=R z4BBxh6_Y>qO9`Fdi1s5r4jd@=r*-m#JC6Aie)BnF)|Abnnh`xHln1iiCOq7jv}SUI zotfCqE8-@1)9(1R^byWO5ST^=*p5^LW=2ZZc?kB-qnM)(30jVdiN>L&H+5W6DaQR%b4m zFdMe6-I(M?{a9nj{Cd_@d?QwKC;9fuuGOY;1&U|1az_%dtKYq6`LK&1-Yal$8l>1% z=-Had5P6{jKB>Z7A$kL!27l9QVJpJW$6)#z zzA_Z7;|eo?q{xIzdJ?jO==}^S6-0}${@0^7?F|h2mRk9QqX`qRspT}c1&4VfHpRPv zMSFuQpZ=yCms*zs-*rQ~G1Mv@AQkzYq2lKi&G3wjPzLk7UUzp|7s(8y+8^ z=(GfsdF<9OA|Ds*)IY)b|2L*1@a)xStGcNgKnEY zIe;Qwr?5JclBq+?>ub5vDFE=s?2_Tj6@-p zl?}8J8m4M$_P)dZZzne3Y2!nkIn`-76Ze)___oZTe5C7 z+^C%p7h}FZHK;jBliCyla|o>>eZ@Xoc)64G&faiJEq)ROOrN)9M?Y z;6GExONxc=yKd!E$Xpk~b_1cO$0rJZA;-MKWI&@Q)Q$5AK}Rm2Z9T zQR&#%&DNhQoli*s+PF`7kE^GD-ORA4I27;8Uh$i6#&RFT5t zkLR4C*B*sc8RBQT+B2s>dG@ZPJIJ1pWsi=q$?K0dU&!JA1%GD0LB}kvy^*}Cne}k!r0{AvHdV16o=1t;DUnY#uGD{Si$~s z7zR6dd7fLe$S?7W zb4QBIhsv@-TJG{!Kg!5r=i1s)-JaryZ|*0{kM{X~fZ@Q7RsXTf6%A`>F0L1+wAh9=9rsy)B!vSKsfFXX%(k!FO0Wx2sC_@r_7{spL0M@8dGc6j z0t|%*ko&PK;5NcTK7(j@$8ADcDt+WIBP*zU6!`gTO?PIb{hIIW5wfa@(-`A=fy=5N z<*TK{Ugq)dRk+5}h140HbDpPyvyL0-JqI+33U;SVNR#J6vKP4VM4;Qe3|=xoQs^=! zgNzPpbxJ?7v1&mUlAl?L$XFs9itwVpQcFJr2-sSjlQjr?VZm?Te%$7L=s}y@Owb!X zTJX%$BtTxQ2!z#qZSwb_RPZ}sPAh62;jGp!=+g^if?qfst^(E(#GN~i9ZdMvPg8+O z+YikIK^bt>9`_@Y#oE8W$dz*t0hmr^u~aki>$%0*`z|VvVilY~4(05@KC=F#pdSFo zWPt=|Q-X9|Tg9?Ivvp5g)g7Oo6Oh}{|LlfulIP*QM@%~8AvL%vf_9~c=6+EI8!0}o z?xCzA*;v;}u(LJR`OzgzV-W=?GUk~`Bbx)?iV2rYZQ2YeG}rS{r*dbwIyc zfB!L(Io9(pPWD+0388WIT$fk8Dq7^Ky6OlGmgD)iZ`|yRYc@r*%h_<=rjtG(k!&@} z@3xP!qF2!Y1p}HGsp`|PA3R_a_!orAAcyFR^uJ^Hp}Xy334y2r$A8%WJUFl03x^6V zzldPJ1hbl`h)s0yc0xTi>l<*xxlb{cI1}e-?-Yv5rpIQKxGzy~`uctt0}ZBUiM zE|cS7K;Z{MhA9~jM<$cBicqxxIwnr{m9Pcl-XR63w7HE~`Uu&@UV|VZVc+fIG~L@= z2HJHz71tYnlb%+T^orT>$S_Nl`k&KraB~)EPWKrnJ>810Q~<#UV%94tQwFiA3jMcAMVA#9r6GfPEMoDN*86(_gKh!+!#Cf6_+1vzNI!^%6uV&b z9LjUzq*azg!}!vK^H&e?F2m)awqlx{ucjk_2<$`Vk2Uiz+}rG4tW=sMZpNouOHaEA5=Z`-Gn+Z< z!C&5*ZV$vej54Um|I>BWC)-)(1R{E>Q?JL>(mMXxda>AxZ%4_V%R#x z_Emorn+CBxwj-#g{3y*EG?NK>N!*ysea`c|Z{mvZ8k7Le;V#}&jX*OK0xKvpev}oX zOuowu?$ZQE6ZTz?FkAW|A0Obr5N~ERoXdHhPej$1DLsmkINkn_QXk)U3oLJ1T0MeK z7<5-t5Tp(UU{)aogG-rcUYd=3tw>gN*vJK{I4-i|Nm;A(99)jkJ7n?#E$MUB)eHjiMyM^qk62^gVh zGLBKEr+|>R^mIDwyL3J$S<@OC0y&Tr6!dXotSBbqvEgtYl^kCCE9S_V%J`jL0AH}( zb&_2a@S(xk)?!@MNTyGToJFt5P$Ku^B`jpUVbJ+LTY4Y>oJN$pY;Vz-i;6ubbi3({LT5t`-mPG|S$j)yYee zK3gl}>9s6Q?_*Yt*@5T#o~*!Thss; zEuAmVEz$^g3Er&S;n7X89(lR1x?hdz(d-{!79NjR(*$LPiwLpYO zfRY)Zo3qL9pTX_pS`qP7ASr|I zuZ3biu}`^yUHE@=F>k5%o1fu+_&mx}D}WR9i$XDL;&X?C%!!c%2g(Enayj^kxh=zE3?nz?ybmIc@n(eAvp-xkGgG zi%fU1Ge=wvK;L8ayN`)yT9b1J^zWKrh|cv=%ij4IAm3jAa8a)V)AIQ_K69QJSzcIvM~zm7-9?C3VFqRSrsu zSvL@LAUc-G_s77nRW$$pqtVjP?jw~IgE}`{ksr@+WvK1r$!!4?vO`oXbBBpr)cDW* zR){Lr+SN?hQ*RUBg^j+(!`;j3-+_OL=#~wdgqI!eq0wYZfyaWSkFrz)L0gzp+ixMg zU@be?Ii8)tQ5FG*T8ER|G*v(K7vvlJa+ZaHSF4jaR+>_Bcp8R_?d_8EHDcD0QHSaH zC+BGovBV?jy@~fV? zkkW%?B6IP0nZE!C8SJrIvd_^wdhMz0rwK#(Y=7EQ zi<;8{j3KL-H`%zx1598NR98B0mNHzGB#H-4BcJdB=6FV#e5r$KcO@h}7nS;a#qBVd zWl0LPC>o$#HU88n;!=UPlDuq_hyEt^4yQiXU}lNwS=hN7F9{=$9=q%Kdl;akx zmh1&YE@<1Na%=2~+-)zc)J7F%^qc6TO&u#aG)q5ewFfl>ZIq98MnW_?69)A;pTk?l z9&j_E^fuk!^0mk>>G$pMNQjCOkt73?l-6r~N}~#xPFdMO&j}NIqKhqW@sQNxp;u@Q zIzva8qe+Hb_T3=jHHM{w^iSd(-)CJG!n6UDBqiC~lxR+jZI>0#P)Ws`i!Mbh`P@*$ zrmT-&PZcarC7L~0P6)H{@ZdWjNxj$k@$Ta~iu(GjpZ3k1eNXWb6i3R!3@_C+HPj^z zOAqE!4T-_Pd}ZYSNh#yN3b#|ZnA%EZs#}CYQW({NHldMmC2=%~-)`@!VErJj)=LE( zEmJ~~7!9pZM5&2udy&MIX#GAMZELS4rm_y~*dBi@Ly4yceyR9G1_qN@ISQdHdQ%e{ z8?NF_I%ow@I|DiKbgA%UUBr|HN_fD`hYV@s^<<{+y1kK!z z-6F$MCF2^q5s6>;R44Azwir3GL9O z#mj<%|BZ+9sv=MDH<&ICG`_DmXn+hym2V<^5}uj`D-gu6AD!?QI(SF?+Rt1-9UtS! z)Pby|CuzvT-smQttaa2Xrlj4;OUMkVP#6 zy|Bf@RhIHj0X_}gYSKd74YFU|M)+oGx2zl0sYS^qYTWTK(S;om2)`07^mM{2{G&UR z=tOg}cmyd`U+)43Qzw+7bnKh}5{_?XEAHG07weQ5*m3TJ**`;{#*({6A5E#e5+17r z;RRB)RQuzjq1DxknN1txi9tH9n}6rZVYx|U?^g5S#E}}-dPi)(7M%kIQA?n&43Nkn zsh$Lu`glf-^;If_`0-)_9n{)fcy+j?`vPujv=?=#E>p*L3S_g;lw<4x5ROJbn+_Xe z7#|oBPJx!e^E~RMY2_N zV@YUw)HdwmmS!FRO@pz5tvFFNZ|m>KD9z12;7b#Z+k@L`3Ez?bb0j)$);;G+^5Y7za(KbYv#0EGc@4*d$8&%CEy__>sDw8lm|-T23uY`b%wyc)jv=5--r&2GYhQ<&bEmz8RU0Egjin>Vkv4QAKaKXD+F5Kam=|_D^{zk(-K?pPe8b{n zam!`%pw-js>F{)UcywNB+P=_?g=&abMa2eMmQsKp&{9hUpbaNEb&v+omDz(gYLy>& zbZjW4s*+L;u@K4CbhZ4fS4FKg$aev^ASaURj^L)HtDB*MmY1Z^`%8hJ;k@nUYNp3< zZ`VopFezrqpfu-}#pY_!?+44~+ASlz%=OAWaBCc=u+Ap6o$O-KufJ?u)hdH%!r7Vx z1Nh@l^Nt;?&B%e(W1PCWDlMO?{m1LLeVmvIbKG*;!?&z8?KwsM8Pttmt`VK%h&Jod zF=5L)7PCXJ+xRu@;+`j*VBW+VUksi)u7fjk;Wpo_C_^Xn&dLgx%Wkqeg)(nDEmFQ;lI;l$0bvBZgMw=((GL0b4J94P)h z>d_SfFx#^6Lq=6rH_l6=)uAgghBe=PULYp+F!ePYzj7EE@Z2vi!i&Ky#IXdN;QAv3 zb@Hz=702;}Yk(R@Cnh+f#C!Nfxmm)&rgfQ*3#wz&s>5>&mPTj6O0{LjljYuaH#2-n zh@9=`b;0mws{-p!Dx>^J5g8h)aE)V!g=nWI6t+dlBU$ zsrysLz(U)X9Hg1%-kAwI^zqX?WAl{;e=Xq?`Xe8N{_@dZl@TUdJ=ECDk=BlO5H7y1 zEh|agH`VCmMge5A#<$4HclWNd)9I~38{NEQvLfvjI8wWa*7k6wu<@{P(PO$XEfOsj zV2ev`8c{Y0+YN(#c+F!`J*&2&{vw{D>q%s=<0a+{$nm$pDwoe zH*;&=j}$?}GpmIz!bQ5^PF9r#drPGFePE5S`R@td5E!p>qM01DY1UXiFgE?Sx8u>}D}nQ6*{$(YLIb$OO- zc|HipkXs_1gt*k2;b^fMRm4A8vm$%mc^G@nMMnv&*q~R6?)N@3=e0Np&++ePUcbhk z&18Oe)Ia!=$pe4gI*I+xBVCRhHy6xgiY|-tve*l5F7S2v9NMt!*0oIO40AE?zMzYKdb0W7e`+vX%j6@F;4fM;#az< zEWTBLX!+Bb>`1vPtA|GHj#o7gh|;B`X0Oy##s^gnbRcFx8^km*3G+W3!QJcEi*at| zx&Sb~_E<#d)c(y5j^I!du-x`4OJH8E1D(!n&8j2kkh(-Xy1ybfO|yJ(PJqBE75@3f zrk3~SpFvY-xUldtzeY2MjVdPutL$~$jw9jpKIMPDSC+taABpzExdC(oKIT?`^a^sF z5IUs_9FGL`pmBe?ei$AV%D4U9_ecT|Jhtbf3ld^~a_^a>c`*Z0h8Nd9k9ItIaBuTS z^FHxQ{ z!sjz1>AK%T6s8ZF4AX!Ckh%(IIu?T+ZE_NVcHH=9KWJ8b%2a<6ZE>_j#6Dla=P8Vm zs4_$;9O#@cSJG?!d_OP*TkFg(y3Y-_UXy>e;f%5EjL`b(PIby(1!Q!!fxN6+J0f3s zjr|AM(U`_}P~zxd5`Z(71C(T(AZ~zRxaBua!2@fD!S-hhS=Q$O*1EPps>_G8`Nk?6 zF)W>I`TA&Gp6bt`SkH1fyXeoG(4YP4T*m6h<5p4#qnxt85e3Gnz~qoXs2J@!t&Ls= zxN9XxfHj*P{fKa%A6?dlQB~TC#1Rp zrPfR&v~H-;IE*F$oxjLS80ugksQh7NNY)f^v>wKAllOg52YQ7gOfC+?YjjIJ8}qJ`W zLn}=K7Z!W>R@0U>@C}-i@BBMx&Bw43!;f<&xf0S*9eEhM+VW<&M{OXz+&A_V!yLnh_}Ib32MX5A#Rldzn@@O zm2K3n1~*#{xC}TWpi3#}fIQ8O9(PbygBX_z$;}I2tH{Ma?Xnxkz4uy0f`>|&b>^V$ zh%vg+-tSH4F@==a0IwpV-b05Bljop!5fv*a)I=dt>l7`j4I)PyGzf)@=7DioNou1L zc7*N7+a7NvI&2-{HD?Oh^UftBS>#yRj!&m&GLK9LaJTu~a5IhDPcc*v14ku5#rE8b zO@_d5Hej~iLj4Q0doY+nuHp(N~!w^|5trb>-h@l7jUCX->-nmqF{92%oBST z0Q?jhQtcej6VBfS$T0Xx>jd~#_9XAND%Q)$7l$Ti$Ici*d0!M0{`6q}dh>n3YvHp- zvNd{1ctpYBHEENW2R#E!t1#n%8uRqP7{FwWeN|ek5pEArlfEJa2IHB3q25Eech&H+ zo)RwM4<}x2ULAt$uQMAZSj#Y#^n+D#fa@>;)$8*|GI^0T2~Mv0`6S{2V`GQcwDOJ- zku84}$qd_S49*N~Y_3W%r-;qp);TxTa}E5Xb3O69BBq>!1Cmy??sm`BlOs;nW5lA4Lrz`Vo|^iC#tuUwKlpCa{S_c&%g3JBpjKd=$v3fcCr5Q3 zf19<7s-xdH;^B|3z>lHdq@VNN00!qBZyC`Zjg=`H^y{R}$p`vndi)9zUUH|*0}9er zfT@36aW4}wo9@8ES=Ce$Nx_S)Cj0XtuK#a&>kG?vpc{aqT^E`EV+{}qSWTdGTIp9h5-|{q68Vnu7Sq}OguAiw`1H1ML2tU&r6fXRNcuHjs0k;Z&K(-Yj+Zl`V99GOv0q*t8!FbrrC*gC6Pe%Oe}3Wf z=uv%?9@>bBc^w56M&=XX%wnSV@n;6z1+{`a?8$W*CPlc}RC<`&?!Sh~W{5T6MPdkWbV4yb0yb(~7W#J+& z@{U}UuycB19OTiZUx#)`Eiu;mT62r=mO;!ITW%W-2UlCBJ+rilFm+zNh&zc2JS^a_ ztnfzSOhrCZM>lH+M1&?=MOq~Eoft!!QVy8?V7dOcnKn~K6@9IXj=rY&Y}g#MupP;G0#h53u4EMj@L4{ezm z_*eSkkAIMlI&r3bi#Ij6!$z}+qvNVPPp$!k>u|4`gy;6OEN?JWYV%)~9eRgtQw(v% zH?w4l+j)MqE6RPDeB{%7VGzV5jb%~r&%L|D4P15iq$M4FOzl1*e=3-Q%PQ!i(drv=xIdRT!N9bur*8Dn=M;cv8-?5!NtAgx&}xqFX6F4gbJo=Q>{<71*YfE>>pXvs z-6@Zpqu0&w|XtBh9)zb)QF*0-drJ zT3KwDX4kjsUz0>nvsWk7`eL0jhEZo&l=umAP4!MC8l>LTcj5zu(WpD-^+}TaH2P%K zDeb*f#s8WSyAWJUv3?abA5g)F74C|Wr1dXu98ZKger}=F`MJ2aL`lX>IYAIUkly?n z5JBmGZ=SR|48LkuvUV`Da?o1r#Fx{SXRPU0sjEmBaqZ|)$$_@ZC)e2?#Mpo5^au%K^L4`{n<GOk|GAPuTdrM&Ms2nDO(*!HPF-PKW?FH1I(C0{qj=si$ZyK` zm{X^Dh9YP?6`xpyovS}@L--%&rc%Y)F*V}H(Qy@`F%J>$CGcB)J&Z~P_-FU*ugsv` zY#jVBu?tUHZHi%vc~L6cDr7h#uqrrB*;(mD_gY2wx3bv|mlPfjO1JTthu?}yP^_TE z^5uq3@I&u*V7;c5l|E2*zEWt4L(ithg5u{3V9uB_{R4fzs+kvIE^wVbTd%D7cg+Kk z0U4AYy1oYm?!U6L3)}o!K*oLIdTd81^GU)buN{?bpC9G1br-n{f$H`S=dxcV{IcY!?b~(xG-cLh^tV-jsrcO;m%dfjjj~`gg{I7BLwDlLLk^EP+OTv<6 z1!{apj!2pqt({P9AqbO56RFZ&fyAiw@wCZ!n1gHi_}1*=ynKiqej4VE>8ZHi8s5e_ zR!)v>&wVbOXe_C#T5==IGb}bysxvzhBLqR2PJ(lZ^^*X(gXb zm4Y3Yj^;kj^f2M=nf85Y>Xta3LR8fO!_MhZ6%6o%-6hfJIo_dWejIQp$!FSFWO*B_ zeEItuT*N`7=E-o#642u#c6P~nut|dx(I~~@feruCFvdy%0pcWD;ucA2ze1-O0_rA< zUzx&ajIo`_F-(@s8u1KkieRBQTdY{{IhixWy0ad(A=-P9ILovJ2uCJ?s@nsp8( z^hU>OD>wka_cF1fZY$Rgzk2jf@UXOS>*0=S+xvxm#BvOz>z@lm-K6TjeaML^;!o3z z*2j1BvPV6$%^U4k;rzjM@CjIWE;`$KM#Nh=;GLn0aZZL73um1Fhp&GM4&-~=aN#(a zWMbQ#*tVUCZQD-Awr$%JCo{2a+sVXEzIp$@?`ZF;ebUvn>Zx_qU28qK?t51iZ(fqf zSO?XxI%Fu-WeEWxVal|-NRTXxtHw>QT=o-_3DE=N0KNNrDHs;Z9nEp7BctR7+O~05;%^xJ z28>V7S(2~f?Y97isBU5*jHs~g(vRlPSkjg=xr1k?Fvj^JoRkP^Tyx6v<3R_umWy>N zHocZbDy||qIg2er1?}GyZ)<@ zw2VvRKl~)cd|-s2dJOv`tdqPP0_R~++HFsC8_R>>zU%-JKb0(MdPw%Knyag^+)v#( zo)Yad%G-ow!PPVn9vStG)&*y-nv8q)<-x_=_m!dCi*z$Ph1N7*r*9wGF3P<>4m$~_ z<_DzsDNQ44w-_-`5}U@ z&n5y1n8oJ_oqWT{xSqcx_yf!4ZfC|+Mw3H#0$RG7nCoZ6&GMe1P+GwLl4-eVW|-^+ zg)IWi;>rVajepPw#w4>!zNtHyKwzd#-TyYXl;xxjG+%U=~E)ke|JIoP#+IMSoEa1T6j}sYMUi*et z-9}AHubc;5pvpbJm-5e9?;Ul?5Ee}-tPP5exQ$i*48^mA>O#$G&f7n)WWvOW-RN8q zl6-=nwnN=4C@cozUcJ7MW@6NHyA)_`+0yiL3YuM?Z6NhN{ohN~urm0q)W=6Q!mZpg z{BrLuk0naBLcu|p9)ailq(20SR&@eC-9~gW;=s`f@&O!elxG$#- z`p^G(n^|WLv|j}-=mVVpgL5ou&$7yr$m<(x(O4<+rt^|tjb{*DVP3G4vU9USWDI`+2=wLmfk)wi+ zPOZ$zco7HjNC=Uy9=2o>Z;MDgr*4$s-IB%mGI`Y;CEK)xtC{qWIXvC^pk_NS6}JLE2DSdFT}2ZM^t}{o?G*lL6+`GlV)jX?pAwP zSXk3>k~v+BJDBjCmb43K2_ps|Oiw{$UW3LAlI(CWTBWVpUDjLq)RwPH<<*4)_Wb=m zF3EosnUM?3tY&derX)z!ph-ef&CHO56B1%a(JF`uA6k|Gic|rj=nqT`K>_HoiTv+x z<~FRLzJW$9@eTgWOTz5QfpiXdIIdVR+~_fDK@w`(9i+e9 zyDu+741ctEUii>DAGxTO1+!R3G>x@>vfSLw;E9P6g>32zm?s&IGgb^2GJJG96DezH zx(yMLe`7vTQme&JRxZzRI$G+I(7FK?*1G9qmt~;(c;VsU){3z5vLtNw!Tm#>&+xl^ zbRXp8>Y(p$6HC|V(V|#@I6(aB`)t1Bj;;{%u#zdFvZ+EbO|*74tT87$Y(-G?QJGCS>6dNDV+HQ-O!)*-%-L}53W+(<9AxrvUG1=c}g*Luqb^@{FoB2x{+L}DH{uq&>YJguU#LXNO zRyB$2%v^-cqV4^&IRn1wW4`HsKFqO@se>q^(?zDxga(Oby&!*E7ByJF44G$7oHmwK zv9V}=yx)acwbZ6nn5DX-JZZ*nwOH>xl(lr)lCMot;O002)Zo$2F4!)_E{WEeF}YBa zp9)9?f?>218?eRlR!&6x8~5n!aw#|$-2c>2-de4=iqz9T4_x2CZ+9J)+_gl9UTXBh z!ymo7iV}xl$~b@cIN(9!qQmSU^i_c2$tVO~@*j?Vk{w6hk#Io!fBkJcV!SAuY}NeK zdUMN2%Z&aJ2s-Ok?}S4H}XX_lY=V>(-EAy*XkZQ}xmIz)`^TEow^}nXdHz}7f~1l({sr6!hUsYWu#0s_jYG32G`7c7`BdL z`Qzz97u~+LviIz>qp(x7YPU!A55F#9wsNjR4rhU^kJ ziS&mI$daa>3J3FaV&$(59jo{`E**uhO8YIn&a&HcFb{#^*LgeTj+Z+w=OOZMHKKPI zL+S*n7RY$&M=t-P)lvw5B)+)3sYGP)75qU@m(-rsowtW?TZRHnAB4l$S%13MQmK*| zeuIlk&KNF3!^6TrMn)^68LyX1 z(tHcSxTI6nan(5VlB=*^e!`u-JhjVr`bGG%EfFb1rAd=V5CVKPZ^w4$5{7>1cK?JJ z2PDR__{KL2SG%wZ`_sZdj$VJ2|M)U-DE9T}Sx<9+!K}4DiV^?iv_<_UJ%0SvR^6!@ z^we*BaA`cb^*B4x0{XLRs+A|Ar7)wd^mp+dw4R07cfh+x>oE<)@wAH!2L&?FzO&d+?e2|qV7pIoE;?KyZDG%jq#%Y&6@)H5|NmJ*pT z${bdF#WhowQetpcYVQ1#aGrBwus4bE7^v{;`lk^vG0srIz)RipcOWnLFfGzp!|z&i z8}}Z1N9f){kR1B)oOP<7>EDIHJx7AvLEL3%v~P`+xV~b2AG7=N@maOAG@fshV3Ktt z_(n#E*qc;Mxn@Ss(;H%5p$nk>6k4w2+n8Op`o-5VyKaYQcZ#N2q>D42eCUVw3|Kng zD3p4(i(g+gX2<vtVRhpkIe1HLImKC#$AuF^g2(3$P&M< zq{ST##_UO%8}<|W-PUm>9ef@s0y_>=n!)>0iAS>XlKOhtAIqaNabzLRH@Lovm(!DA zrtJ^!UHWr=C4T5njNPc0i0LA$2FGvL>digNLfi)1P5LinhZ)ao#{6)RlT%ItZwr*D z6dSGE*YVo+K#+WCTA-zYh-XUEEeOk}rVpOUg--OPA1ALz<6CnS4DoI}z{?wmM!cR^ zyc=VYG?~L1K&;cF-?9q7P_r9eV4G^3-L?+EsTYNCx3 zYB5!c{+}*uwjUBqcKa1V4%np=2KcAtUfHJx-i-|vR66{;Lt)$5LF6In*24*^#;Z7R zA8R_SJPZ9IUhghT(te=n;LTc#+ z`|t{o3Pc6F++Dkl#_pjFAaeSW##Ub#SWa$kLtt){dKbreaYM#{8l&+&g7R#PJm^rB z6V#N%^hBDA=f7-dBr^$a28YcaId?a6Y?K3O zlSi&W)8CV!yal?^-^k#>djjKsNrn%NqwnbFe=1&2-yP%tKtK3LeOUgxGS&#|EXojl zD?c7!vTe%4bNdxlV>@Z_G>N}yr>E^o|H9<&uW(6{Z`e{zoL^x31oOPW4Hmjbx<3jn z-{M^Cy#{{@10q5A!Sa;;I00IUE!JhO%SflNwws>OXo_dtJ>E%rb9eK7%#*xe`F*jrtIzF{AzcaSv>=;A^d80oAQ7uhE|X_%*#TX`)g(? zlB;2x19SUg3+;Pag|cw!Shw>OT~EqjiHM7gPbp~k!r98=ACnbz{j}=rncsT;C-bw%=(V`TkfbIYx2T<#Owjp`t-i?`7uE2K{c z>?D9)hvF8xjI~xHt$RAyZ&sprs7}yG-xXb1iZr(82B^%z8p%=U&P#0VaZ;(U?zA1X zyg|McTC`J|;b5xW^96@~&;YC0|d1_maS}hqNGK@y9c(0uV*kBlL8}Ev!+EY5PPLr}44Vekv9OFS-F)F># z>L2D9E814<5*ZCnSwmgkRNmxqyIPD=E&IjI6V7~fs%kbDXb3!4Nu;Y3?17W5zq z@t5}H2Xfnw+F`{45We9@;B-^hcVEQKeUyAeyx;r;7L@VDldrM7Cgm1YnU&{=w6Ft1 zLizc*g;g0nacS~t%zE=EuPIS;d+q_2fD{;T*mTRWWkn?Prne^`PbXXfUt1%yE&@v%DGJ8K<~Wy!1WMt1Lxs*Lk|11>gPik$8$AeS8ri0;fL(AaUC5uOj)Ne zMT}qqfFnC?LkSbyg-7MgSn=Q(adLnWJ@vu}Ub#b!-2EE1FPLl#_}jJ(Pw+v+sSpUU z6^08M^`;MjfymvzH~N*^6#%5)2f>RD2HBNUvG0w>JY#J}K;s64L+e8zBXX1O-Hb-< zFPGWp|9CY3SGvh(p;2RMJMr6qG2wkC8Sz-b#@5g2;nM5Igs*ke$HRj6ZTwB&1DjHd zu@)J&ncuKT!KgS`z__FS$vSqb=&~YbnjSZIpr$!dGI`J1b5q1fg$5j^ELNzTgO%MN zNl15$z99t(PE43#{fGrN@hK6QR>0?W;7=686bpXi_%?Zf^YpyQ;OL8lrh#$|j(75A ztTOBAQTp|VND2kog{VTF(c<+6%H`gIQ(gZ>Dbzz9(P9P^k4?Cg zD&G<3r=Ud4Ni{?4ngHN2p*-s_L~;t7t0RSw1-+&W&*>=Y?sGDr^l^bHpUoafOc|R= zSn0Nhro>jWPSXQofXP=l&gTT7)3I9DKb?DJ!9Zse!qJ}BKok*h0F~=q=7soJsot0* zor_u3I;N=4W|GqP zV=VF4_$I9VoWvhamf?)bJ;CXq1wEjuV z`%FY)hmL)f2@M!k^HRoqpRL$hEb%KU*;-t{mR63wzr@6#83g zgq2j5+2t!;)p3>%$I`nt)q0Vch=V5~v}|NKs(I^q|zAE=vSa zz>;LSm1Q6s=nMr5qwX+d5-0?BbsSDl0!~ZB6bxE0LqK>MgW8WwM3IE!@t1G@vl2Vg zDi251KN^Ub>TWTk2WRslda9IwCs}dGO~lFZ|C>BO6)cw9__yY2N->jLBCLK1M+TKE zZI2d7-an+n+W;m2GIVYMJ364LUorDFsKK=Z8YhF+rBGYL$MFE^ixcrXDV5Z@+m_xa z*NB#vbf(vA0C1i!&h}t}+Qy;W3vx9H8)kh5mkv~qyx@UWM4qUG7eK>6S{FQ&4q5s` zJGL!&_+PI^5g}dJqL88Qm-$J@p%=HJrCftc#-BefU~icvFfcioq~8l0kFTtU4==w+ zK8igk)Yl+S7YF4USnw5FU(KU>iZXn0S80jsaqa#D?FER1sTR)9T~GLyvZoa5Q6&-k zumFEge}1?oS=p(mdoP;v@aY}w05c+X5D@vmUjj3nIZ{08{uEyol)>jnx5uEdALLaO zM6Hx>U84A`Cu4CJT4_cUv$%vbh7u3`47G3Vu!;C}@4AI) z{E4@zJEgsQV`-KJV9;W0?h#X;Pd~a?2?55XWstilZ=xS6dUw8^ z^&>A6z+wHHy9Y)Bpx$O^QLR!!R>;NiM$)c^!{Qnr$D^7nwaVHeZBRlQ6=BxfyNu~* z<}rEGj zJr!1noNR*lSA!MQE~Tc!-10Gp2f&_8xyA&2PjH}&4(X7j;2vswVJk*n+r-M8stw8V z8kFSB5A&?SQd`YA%1PYBFrWSs-o@mSg?A!l;kvH21ZFfg3~(A>VUd>5?#X!1?%nQ}NC z?Wt0WI5y*;LOD(r&8wFh4#Hz4@%8WvS&H$zl&MC^ol<+L#XpJe`!iG`)fyZqQ^0? zH*FJ1oZ#7(z_EEY8%ik}KV=YW5|8PxRT>yf%2iH%p`Qrb(sCP{IiQ%#RJxEz8rb&kgCfMkqG}C8ATT0|SVJkB=+&#$n;* za?fw)xBvL4fIyw0HN&aYq|0cM^R(3@wF({3l~!vB|1P=7(9kXHOE2tb3(Rb2+w@9V zxF}o3cJn`-(D1bJHr;&~_Eq&tARuV7jz#el*61x6Ja?ZIB8+L(ZhmX9Ir{%+iWc1e zGQ~xw-1|WORc>JIP3BRA7k^Y!HjKw9!|n60y$jnbK9~Kl81^9S@$0SgEV5?Q>$@EZ zk0NgZ_*iQ!KkIvy7Q^ZQp9@8QzPA*GpSjeKo=TuO>h8Cf z;WEP&JVT~tTB+Z|=2?xY<3uq78)H3)mXsHf%kEepzC!|>8IMSsJL8JYb?wO^d^8kd zJ{%{tSMwl=HLSh2KAA(@r#7Wrf0{S!{SG4pDlfUn@N2w(x#MI#&9CD+8vOB} z|2Et9%V-;;%PseWLlNDeFN8uhN?Y;Tx=HieNXE2*KM^Vf41-9HjR}`}2h66-;UZCR ze#!RNiANQHyW+jIceYvoW4RA`RSQ)__o;4g>?8DQX0WqK#;7RF`)+qjr-x_B)jsnU zrtrzkQMtAj+;;5N^udXhyw(wV0E1yzH!E#F@s<)%{V-H7rNm`SxZ6SX#=Sy++05Vm zgk86hN2tAd`~#NSIpVd4wJX8S3sMjh4ldcmX=D$mBeq26GEeCf{7okt=9wtXF*Jo2 z_=cxu0b6xjoyR`K@AEf8on`=D=(qio>QSZuA<~=h6ZYu;C7{Qhj1A3P1xE+=Q+K4= zaQAGoTikm-97--k%M&0IGprYu%Dn2d^Eqv}a z*UP|g29FFl!>f?1W@R9f<80ynC9TohrC2N^L+xZd7Xhu&xJm4wMuND;=r7tp+KVOV z^_8I5>)-5dd9l~wIg+eYD0A%jBx+IB3BmY;te)oUQ9G1bEd>#+>UrAEGf zX9`$BS1ePf7n!v6S`_-IboDxFC3NvZn5I~rwj*Tr%xwbY3U#oS{5w|qfiFh+3i{JD_~`B(=OA=Q`~%FXKN2YI zhKAf&uJzZ}`Qu8x^F6uq$IjL;4k`-8jZjdSN_Rw2k>J5B6xG^y@Ly#XcQ!O@sUg+; zIvKdWrms+hT!V@f^Vx$wBTW+u*OkeZ-4{0;E&zQD?{?ez-EW_V#qHef(5P3GjQhjy zqM4c)kS4rV$kz`$b5|QBx~6d6ZE?W0B{!ZzBCENR@ar7fdY;TT2||@O{4PPwym~*W zPH9ew>)?LfEx#mEOe7&o-s#f;Q#C!w4a$w`zRS5!wH#yh$O8aUzwpcfETsPujh6A3 z+=P&JI>>PnQ{}`T{~56^$(Uv?6nVim$x{~T&MzWVvUVT6O$chTV@8C#nKRr^Xx5Jf{WN0 zS8oGmW7ljZW1%Rf)8r$m+J@^8+LK{;aJ?XBpeFO*6ucXa!&AcOVW~P3w<1-A_f*?# z$5~4)?ljX!X%@CT##3dcT~`1+xgknNIv8rsX{!qIV+9ecsP#V#i(rsGxj8uv{*zAO znDlWVE{aUiSJCpVGimA)^zf}Qt4Pj{qn*ji6G~Sn7bDcrlL|KH`K_MRJ7C!z;oW2(5`U-Ek;j6#Ek=W90+CO;=)>XJL8b506EWF`U7Dr7t&TN9JhsXv=$s41fna_aDI64PZ>+<&4G@V})av*~X za1Pwvz-!GtLVZoE3G<$b-4_hOzO>OM&P9zs9qKI
UQ#?&TEhZeq|=WlJXg6@0< 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
E$G3%>Dj){!(JV|53P%3r0Q0-pC|z{y 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%0D*_bzKbML3T{If9pGCBtC5Qs*T1%TNCuKR1f z!~3Q``%OVdJJ5Jthe`P^+NMk9E~#y02Ism9p6=dX*UEJl;yq4!%|M5Lo8iY7<|=d3 z@2FahLu_ zF3xj3FOPc{7nl0VWEVV}f&inv<&Q^j^3VI-^FEMRdLTR-F01N8hntzc^Er^fZ6KJn z#!c;sor*;EZ=;@3c?mz&k1nsO-5bo_e3_YPSVQq9104G>P@kH^8*2`Z5}VH6b!0zw zv(3!R&g`x>cat9O4Hqk0$LBjeI8!)IflMX;B)@rk6Lz^G8;%SfBY><0dlz@Uwby+E zQBaCy({j_h=E;T1k6hptv=pB{_cbE5tU)an6_ zDzc(W0FVb9C!Z+kn{*$i#MT_c2@uB?-Q{oJDWFRC?F0ES^^g@!mpIe)KSCJ<++ zfVaT*b}?_Q5am!~L=oX_XS)2{Ridr+b!lROXc6Tc%%`)XC4mrXcJYKw7Zd^BAYo=d z{2=b0hRd027{DDSlm~lh7xYg4ZynwplZGYQ1>>a%tTL*vj11w zJB3`dBCviV#jh4qPAHGE7B&YOFP!6B9Jd#mnhDW$uS$$pjYx$dJ@x$y@bse*0mCuMi};@VpN6_t*lO50&YCZbV;tqv-c=!5p6N1@|<^Sv{~PQAviWsuE65qQyRO#ZC;7PL9pI_GUSIsUJ;^ne4kH8a93jv zX=^p1!3tr=AYaYaA9U$ZU?@~ISMBAKiJ3H2uLLls{v+VihKtJYwtl}=j@Qn~shmu+ z3P^{0V^wcDX@*N4;C3OV4N(A9El$OuWg5gqWn;H>fQ=JixG@Ld=Ya}t`d&8f)-|@a z%4pyOKU<%@?tL&8J`ws$E*Qm=q=M)G*SapfU+9c05z74&;+;6RUfK#^$0+8%3nLDqY;?+O~2yklqn+ zq~=S=c5w~GOO<9T<7ging3`b)CwqQF5inonVt)HbrL$)NdlCp z>?QxelH>X~&<1iChw(pNn zg-l4T`eapnojiD=9y1(X(2d##ZDE%Ik#@pX722A+cvl$XoI{=GL2CNcS?odhCHDir z)Lr#zSG9N3r1ULRQjcDM>7rva?a&%3$9ux` zj)=x0I+-#vz&d2e{nx+|a%p zHg1uL7wlM}B29Wgj$WK6YqnG9G>@{>iqXD`cgjaokqUK-9fLR!!q;{%k>7`HsbWCQ zJBCtx6l_pG-@KkfD+OsMf2y&j}tn*H=xz3**w|gUiWfpvMtJQc+w+5n3T@M8w3R z%J58*N-7|6_VV+!43HVX9#fG;#Tv6=LY%Xp`5f$MJJu7)h+$_L<)#d?B?5`SvO^@j z^A2j5un1%te+}3g0ltjnRS&+x6hOr`+V@fdYZuBbn$Htq_9TX52QA*6fNLP)*yjbnk*l;O?t_nJfsJ|F~ zXA<{eu{!6)mWkY;g#dgmUK1?G4dog8AhU|nQaBrwq?%7N08ULL$42j=3LP6$qRGm3 z4$Yc`x1-wuT=lY$I)yRjjBC`ySh;d1^9ptpHe{(tJsg2blE8~0KTSz@`#j<0BXNMO z*H^VECR=c;oSODcA>}B&uBc{$;^qT974`qt>VmiMP@UI}%7+`8fv^j!o)%DvN;P}~ z@nyaJ{Zgb@0Tk$+A^U-Fu%rH57**cNQX1-h%)s@M8oXRo`gvC&nu=YIm#WNdX+y&e zl1@!`HDw?AYSXM7sA%z0*r-by(q&eXCLM!3(n=a8t;;M+IATAQlFE9M%=Yp5RKsMH z_pw*S%0$zD=9NADsURh@Ao4(FEoj|ISQrGvn{!Km4hJI3|F^7dqC|OMXQPsC;JB@R zozr@B8mWSUKGV~#5n3Ip)YA^SZ0F1;;Ul0n_=gKYo6)k$ime=E#J}ZhCV0OFwKH03 zrj6jHca#XJ!skI;1bKQE-VCly@U4Vo4B^p=t1k#}H&}?AMaelEBo@rpuk|AP5=H`e z*kpjI4gyeCx&n3msV#_qiS0&)C8jU`x40O`EeE}~OpDb5a598ai$;qMP6(YA;D&5% zw%9FcPmG@&Z&2nJukA8gDzWp241kM+rhr$Yb*-CJ32V!Md|Ve)IVskMm75Am984+q zhJ<@nXYi?EQkg_9+7+qEC`xJpXd^vRB(yH1aqNhInYm8+{Ju}OAiKw@b?BGa35b%} zD=JSmoi2=)`(rs=t#3(?TBVdJGrC}yJQsY(s&1xN#wlMhN3Tk~Gt~wpG9p1cnsFNx zd@>NO&MI*=Lek8BXXvYVjwQhQIh+(sasKvKkmZPrVdtU!r4~Jc^67dPzyz-vt}!J4 zhn+{(9S!00)~A}+BoMr@prSUs7J&*`^Kb^cT~vOT?kUlJ@=DwQ*44mu0Q zEY=iWZg{ATAamAk6I8}T*@lml08D1pLf6@f^h{<05X5AO|F|mcr+{)wz!gedReg^u z@TltN*Q5f{)iikAn#?N}fP!{13re~3Pj-^A;}vdO^Qe_Xw8x)1(1^Pek{ggS%CLaH zaTcc*)EQd0u^Jwb7{{2&T?Ibo({NBl7`9rZQmnW!7iZPVAHje2-KOML4BJ)s7MFC? zBx8+1PLquT{R3V|CKs@akXf?El@ahl9iW=>Lhciw9^3MG{g2$(0RGtP;#?t0F_XX^ zVy~j|^z2Sl@-S`9!aV)}1>#Wa3`KN#zn?Xxe4;1{=&3y-n8r?U-*=hNozRi#8HJ$Q zXFiXS`=WWwBwNIn!R?aW-sI$b{l6@X>)fq;n3dl!EF50uj~DYmC(%{TEujmM zlGVl*YZUMUIm0Od**Jh^+xcpXw|mCCoEs)(kuJykT|(ZmCscIg(&DOWe);~d!% z620j~m3h*lywuW^v295YvR%QH1wqj&e@pRvPY1fj{4g^Qak_9QT#|^i1`C~NExIH6 z>qEyU%DpO@1o=rj_UvH6<+hCulvw`S-=@vFf%W#?0$@=7fU*X0ns3JsJpJ+J3?mJt zS2#siD8BdsCh>rWvJfZa&djwQ3kHIxG53q+b|MYr99_%+CB0Odb4OCMvcig-LD zsF#inY@LYbXiWR~0g2e+E#&evB6F^C&Zq?D!5o)_1!7TM0vZGfXBS7g z(Kf~BKDVCcEuiGCyavH7%R9;zT*m*ixpw9x7&h=LN%51}sTRDrxE~nlI;=p@S{px| zC6z3Co<69_>>qBbOf#%!1XjAR8JtTYl9CY!j*(OOyl%Rw(6LT!1J?wB$e>HoP(ZAb zk{bU2SSwqupJ z&eiv|n0%iJTu`oWZ_lQI0hgwgi*Q${YP8KBpkmf6v;OLy&Sj~d0hJ!Ymeg4*IO=S? zL6i~$5}=N)34R7CD9||5eXIy8+xDW=1NDGYW^7G*aMUSq0~&>Sk)rO}S#go;uJ|`E zli9!N=NxcBR&Ere=4g}zt{K&xFb!1fK`q$?m_;CN6bCj+_Hg7}-6HH6(bLX_peD8tL3cd&^kGAl zJ`7shopD%JKe;HqSN3{GxaJb>+}xc9=r=o9l&>$mvcNKnT_eGt42{lXvwT|5Hs8%- zpNG0<66T{YmG9Y!@YP702_=EOvjifyOoescXd{&tUHj0l;#@0mGqHtRwx`w?Sax~X zWq}gb_&4`Qer6+y{YmFySQr@hg3wsgrB>}}xHDO9_o0& zXorIpP@3Q2+YF-t!mBI-@VymKm>;XHj!2L{)ONrPknC0sly*iTa8dz$>-$E|jWY^@ z(MbO$cyhMm@l_!6?t1I{Z>vooK#?m{Xl`TdVTFcvCyDfOiZB0WDS|ySe>P^xRLA2x zugBu_wHRKx-0Wq`=6Ja#NHLdwVG6()e~iQ#m$pg0Eh+f6Y2_beNf2evWOpjupJbC& z)}vu{RO@+nEG*Sq>8g#A2^PeCrAjhvQan^Zp-1$Anna-?-vH&*o68j`Am?R*$bwcT z@Lardq;}>ifT5`W*#qT+`*_rt6CyH!HUV^^M49?8&kDZXnyqa?ra9bpSs%0ux=FyI z`r#Yuf<{J(qpbgHT~vr7p%II)e-CkN0ZPT8Eu?B9kPZl)w9phi_#~(y-3%wirjOuS zEIY|``>kY#9HSu#@f*-R0OzWKFW228jq&zR1}SIqU#k$$JSt!((yN9@@ zgz;Shs8Cflr`-+O74$f%4%<&zP6*;AvI2tn4H2Q>&?bRKQ-j~gUEyJ;vnn}QIPQD) zW_KnZp@agdW35Gd0O9aeFq&$78om5yY#`gg;LX{aAEVL4u7@@f1_3denR!?t3=6Yq za7PK*+i9KEA6P7F%Ie3WqBV~$tq-00Eh3rH^00)Fwf};PH%R51ZbGeIYGD92Hi8!7 zcEsu`!oxPcg)tz85rWmKHzXZwfC8?LbbQ6Sy~5tsIbq9Wfbi~-Uqmtj7+k6R*z8|! z6)ab1`Pn!zn^ME>I%HU7+QkoP1MOdnSpoY|XC{T9agWWr$Edy%ycO1e^pm%NV9r!_(vFL;LAo;7-T4|#3*g6 zu#WpYxgx`*0h|H|6F6~iI8-@?Bb6E{F-|c0Zp;(sc1!n+x>^BLzqp6oxkG#zaG6!x z;QZi)M+Vp&@o-QaSW5h|8WGZZ#~H60wtJupuya5)`0;)rLj)`gp^D}+$O*)=q$BG- zgg=ib2B`ITupC>7$p<lL(2Ao#&dk`V zB!NYM+#uSSu=yy)KW>(ioyNs{$2<&B;1*gJ4yyBEUqk=ix2;?_beZkp={Ua$*-bjR zzPBUF=G)eK8K_wakd?V%k!JhPQu?`w)wsex@L4>x{jHQ|>Y7;RxIS;1<@z7`bXtg8 zgKp4s@GUtEB&7-laa6w}SHK+%QA0u*z0^?wexC*CVeEKLgf0ynun_xjX%`rSF)Bq( z=v(oSB)_V|Rqn?IEI}`3I=~dv#>Yf(+yb=lwzL{q0t`Lbvwl4U)y{5uBEL@QBuyI3 zScuo;1c=hvLV9IC3U4d73Cy5tbL;1uBp(2!c^vmycrrm4XDHP{$S3M@&ZNpL%hnSD zYz|_iQS;2e$6MkByT-E{zo}M6<8m&ik+&X<5nz~0K!DX3ZmEnAH!EpzcvY*b^h?yW z%q`p&I1nRpSxXER;1%e0ANS^kq%1Yy>oix-9Zlk0Tzr9+bDa^)nMw?IVUn~|T^(xm zG&t5&7UYE*#+yh?i-O;6HT8sdtB;fc)>?Xru}ggc>uaiyOWArWCKA)}s9Vv0O>nTR zWc!xK$BEg`q5qMq_jEH&{W@Lg!sdpK2>E%jf!S2y*?3}N-f?!(C7tubMPA7A9AY9^ zlA^22%rNA$GHjV9vezobrUbj!1DEjB!~_pS*`k)Ac#DGi;9d- z4(at^-SSw#%G{|-kdnKp^OV3uS3KMHI(_E!r`hOqBEEcdDfbd;)t#XN^v0g!n?L6{ z+tefIxi3!H$G=L176NKgIAqpLT`y+~HQF+pP<@)o7EW%TI^VG*Ta1;>XmZn#_H{J1 zv&MO~tfz};^jE^?iK2=dUCB}a%jn6aM$Y73QVndvd~9#?yRH%6gtM6;{}cO?)e`eT zL6ffM(xWLe-fQ+m7vgd)Mg(Iue?;W0%DqxbRp`;EDD%=A&SM{E{bkwOQN6m{s;JZA z8w^Y@X6>byr7bX~7<;Bt?WGBo{3SVvr;AqtmMGiV^^CPcb2oH{2@Vrr5qV3rWxjpq zvDf#knE}#{mx9D|69y-cSsyy!NNa{8Y%ME*wwkp?x9bKjSaxV{NMy4ON~<6J80p?i zn5NQmNY~kbQUCVe4{II}?$H{@DOKGrxM0++L`P3-ULkP1hE=-~Li;P!&d%;J&-`kt zLX5#|Iug23=iu)`dW|}O(*V9bT2~UNgf2=kl<7NlwOBpw)s=J&twBe!5xP}3#a!dT zLomx~XaJb6C2)5(OAz>CB}?Tn8JJE-;Poyl9|9<}FBLw|s|{B3*Ma;fn7D@OG@3hG z58+2gn;2e%7z&TOSRs`z%|LRA$o7#wz+u0r6vP#1-# z`q|K|z&zb;lFkU68Q}mebzCHeVkz2sirf@De$T~ZODHA=tZ?_E=gMR=rh6mk-5gqb z5X3lrCm^7GZk{zA5Y2RHiH7yegbm{1@I=2@;TR31CrB(a!0LpKGufv4coV-i+tnJ_9NlIt5pkt^K;=u@UFS~0vHUIIGAyCi!wx2OYz&Q+oR{<7f7_Kc6EGucj@ax;@Kn&=3F@kM!ho1RS?L0F^a4GW6&H5R;{41CkzvH5cG2iHb$mjfDg#LV>hbT zlriKk)P&7TS3vdA8j?|hxuV%^5zH!)7SCnWsgeY!=LoX`$V&>{$d5PYW{CF+pU%1J zFL4c;ol1wivXzGyG!V)|4EI+`ayUip86ZbUif8SN_J)V)vtvf0aAV9Ak%q?J?h;~_ zQ&S({xIZ+!y`F4Dn)cv6C7oIEQNN`+)H?~EQaOnAbgxoNZe2=Sv}x8>D7N}BM$flR zfjj|v;bo>P{Xj1xjH$PBFBH~?fpS@2(+9A>=BjN8^W3~5o& zeBI%zzK{C!+psh57Z=9vUsqFkPa&M(Hb7dAHwqLTh1AQ;)wa`XKGxV)q!=)V zqR1t(YO!-}em(M_%p;<`GMO|8JHf31HMIfq3&HfKT7xo@^y#Da&IdE`Y9UKlz)h-4 zBujqB%hzmP6iUh@#79A@kxBE~mC0jYqU7gTfjSP!lBW`CZNKQh0(j`W?H&yJ*QI4tOa z!-6RRKxA$vCzPh=)iI7ut_AF}4(t1NXk-`iIF1$3(z2d|N<7kR$`dMgrx#%fIh{Pq z2nlZD>`!L+x4-{=|N2kLw$(tk?TQKr=w$5wgMwQ)rRdlG%cY_z(&sb%FPGXLL?7^9 z=9WK_39Hk|FRhQ$%J7i;)aAde3Ocl(b0wFb`O!w0 zo>=zaoHd_r_ZIMcsQOxDT3OTgB!zx^Qxn6e2XzO%1n@87yt+%fc3j!1BhbcZ_e zRD^2iKE8ltI7JPO-62Kh({2f{FUol6J&R%2ltszH*yp$@b`Mi$$$({R;NHFytNP|7 zmF4WNK7za#lJN!khT>Ec0DgFaO>qei07Zoarb9>zz|qyoiMdUzvcQ;)3%dd%NPZYI zn_w263bCm!rbEA|d7X$aBK~IiQ(|5J)^IhblV_kWN7Kjh&~y`{fup{(j)PFn0RSFVdk)fs#Wnjuu9PUUZPp`SEN5^43{22Ql)a zb(9S+YivohAFWZD5EkHhXb-dAN(ph#_gO8C}j4gh_F8lFn!h#m!B8rrFpjwM|H#S{* z_j+XRere4Z`o)mlde6BINKz8(pckQCM692`S<7-`G;cNllH5i56F-UBis%!z z`w>Jp&U^0i1m0Z=picLfbVoyW!6d7o;8YEfNDR0iCS!7>bUkm`Uy?3NA;hDws>!&H zDe&HKJ)T|sR=C7Kax~GRp)fSL=pU)#prkYKvu82@M z`2`QD08&UvA$^Ew)W2!|-at%gcm5L(+P*bz%8-6XfZ?LH&cUp`! z+95;-aW54hx1t1nF?V-H?Q#It&yyxF$N7!2e7z!6L14cw?onHF@W&1Ze&&*?_{#^EPb#IC zFg5UfSXrH!p=-sq$eQhP+)N|$W87C=RyEj9%2gL@e<*sh!x87$@_yaWKVB_aJB}w- zjl8dGebID;0fyEAHrb)84g_CEN;o>VFZU%?{LL+Y9FlG+khf(=8txe+S9=boK3Kdk z!FM%A1I>KNu(?*aTRR$_&CRZ>Um7fl!Kbhd_E3LYbF8m(yWfoUJUntcCc5>JeV#hw z#C*_15!W7i=}#28?}bm$o0e>qybwvcJ5P@w^WV)w1Ng&wP9j%GN(|7*3B?Yc2yLjyzero=T@6SGTPk z{yafaAl*>Lg5X8hQm&F4N(?VtxHIA2hrh^{v2x4ptv=Mv<#BL6^Gy{nAb;nEV9GuG zTc^1r2k`WW>(m<2t=yIv_{Pr-f3yqR0cO^JJv!t-`t~ zHnp&Zm@j!YwVo#3!LvieSkWk}_Ez9{9vhG8r7K>|&D{rAnRRaB4k3TY>VPs$B4PpF3zn5EI{k)2=g zC=3F{m#H0s{?)0jy%Q-!y}D$rnhE)7Oin&GH4Lwqo&VjUiT#f=P;IwV5ZuBq(&qYb zl51fSG-%Ir5r9kw(doIkxfDY2Dj-y;>xb)tCpW}G_-nBg+3~L!-7OY~V~nQ2YJ#`m zGa*Cek|SffUYlu4=PzciyMc&ZjvohX@sW{lOUYhM!i_VT!`EN_WOjO6Dy&c8r-4~# z|J>J(KQj$A8p&k~dg=?#?-y<+N-bmayvQ~e;onF(Qwd?&!?$LyQ+-!oeOG;3UjX9f zZ+p8MnQ2)zz8Gu)kp_)&X~m2v*F(d0>Qgahtqyu8`|gK|2Gj03GqvE;lU%3b_4imd zvzn=JNb&`au}LNOLU$%at}IWvN9;EvM6^501toq7kG(F1@7Z-ynu{e@X8zBM?6B`H zgh+_4O;|$Nk_IJ%_WF43wDgqEbHG$#C^z`C_3MHKl5T`oy_-gsxQh5=&x0Td6M{#_ zYb7IRC}o!h)QG0-v(Kn0;VjOa;ArLoRbO$QsXWFCE0UABOaK<=5)v1}RgG~x30DuI zx-YiDK2W;>8k#BfH<786JvN3)kRyYqqUA>EbRGss9yt(rJgFKGk9_(}!H>%^=dffN z)lL7;Aohsw4No}v{2bQCpWprvI%Yrq#KpqYiy<)C?i%L6uu%r__pO}s zU40R3Rn7y+CCbnZk%GAJNF}les04QvGsD5>A^n`XmOV=GEr>3FX@5R_Une4W%*F1g z0Y6ANM?WA|p=7MS4{m(u0YH-Q9*{uFP0a8{ta=)r4{QSzJG3(pP%%9^$nVvilq(>X z6(FeHbC6&o6KHxP5R4IGd~3#A$md`C!34;1CPowV3pCg=5pbB-BA?6**`l6cc}ibM zUAHf4d>JNjWUYI4R#O5{fQ}dKT}*747TKB?`-%PUG)Pu%zSzAWe!%0g@FgT=I>Z3b z92nJc$6^l@%%}~K{tfVrRXf+x48QBZGPcF?i#GJ(t=n@$Qs7!_D>kIdalr=?Pmm&l?A~fN zYK<(qlk-DW|4>pO0hDdoQ{Gk5mE^>)IJ%GU=FECt6#*n5p^JK7) zNzKZ)dFrffa&z^C??DG5Q0j(h7<6)Jj$O4f$K6x9<+@G`o7-S1Oe11cmWf;4HqZ;( zs%V<0M4Bt9-tXN7Mh14*`RH}H{&gwe=JvyXJZ~&3LV2;vs}u_ti?sPZ89en$IC*5 z!Ubn+Nv&)D?UryDz4xyNJPShxA4O==V^UlpF8wmUfIEQD7pN+-*b7wqEC3di%F~fWt=7$bh)|xFuAxdo z8c3ThNor@eHA0#5{y3mf3(Y%;F7SUK(W`i%k@@CNQ_7hgk+xpKUxcGFAzttWHxUDa*7J`*5D{9XyYaw6y}ux?)vtlBavER z7*i&ApU^S&rSrt5u#IIWpySz1k>~A{6+_+;k`%zjSZ$=;}q& zyMQ{4`sfNlLm(7f5c$QJI!6eBnKOS4s60p0S^$3YSQst{T4rPZMw)zR9%|@nR4CeS zEo63?*zl-y4<@{xxSqVHh5TUH5^q-F`Y|skJDEqM4E#uf0ByyCPwA5|^kT6@3s=$$ z&Gu9$2u;t!)J~$PxSjZSG+?mS!L1gEJSt7qI_P<)6!XJu%p11u25Z<`rYkK_g|UAd z%>dlk*EW9Ngsd6kCPXRWXTBXM`tFoy-MQ)-G!Hh&8G0ty@n90tG3$)mUZcR-{Vg_T zc2k9{I(g^sb7gmzc}e+SmzyDz`|oIsI+kgtw3;H8z*YWn7t^fmcEC*)8^mp(lb^&U zWP5n?pVQu_@8T;wJ{4_K&KuxB`dGyHlK?$W0Z<|R-fmH-tH8(A?CXJRdfj2RJm9EQ zg{f}rSA`&w)Fuhul@e!P{L`%K0avMAm*i@Tps2s4wKmc+Jdetr5eIah;QzzbIRyt2 zZCyA{Cbn(cwr$(Cla430ZQD*Jw(VqMO(vRn{<-(Q{Z(D3PVG7mr~0XT@3q!v@%vcr z<}l|+%`x(21C&G=B)LPKM|v{q-=)Ag+3T0ms3tnIn)f3LnDEZ)h~$84w)n0Vrvt3y3p%&*a?$K+NFwwbFj9< z=1n_%2K_=VGd($aXN81xiI_8wPUU zxa87f%#Q$;^dV%+M{}sa-ni;uq8zc0T(W zl^x@OQ5E_Ybk zB44QNdu8<%>1B3T2nWtnuT2jRJM*}esQ4<~%06Xhwutr3b%iA$iFjxQ%-jk~=7XX^ z%Z?-;9c>aP{RXX3o^$Evreu#J-H!+E?#J;WTX|?kT^L&Yr32KN3ke}$$^~P-lW3yH zL*;x}FyBn9_lN6X96!jMA4bmwjiDGzerUl@>k=J&b(~S^Eecs!F!I!C3}^qIXz5X4I^;dY>+|qjq+&_?M6r4PaCj6xRG`d5;M3gqP}3y zsB`w#;b^z!1So5RaItz)ySkIR8IHU)0cu%_EsDX7!I=uuDXc*Cn2WK~*p5;czn+fO zj~p>OjSu@G)=RYX*Dwf25D|Wd?h0w2ZvD#c_%ZRg!`N^=?%p{_`k&c83;pz7P` zAeE~ubT+>+^;agA(fiD4l!SS0#c&S|zaC~<`JP(td{gFMvQWRxk4dTF{&91nv4xB# zJD)qX??hs;p$Nhb$ruaz!i)^by&a zjLXo-Afuoq{7k_&t<^Yb>11MrDr1|W7)Yqaf4b-cc#`<4S7YKee$UJ2)4zr`uq#K3 z(EIyG=hbCW82>yWD*9A%{@#h;lYmCKJhj4Eg|{i?nWeWYdTWm7W!T!@i;C!4w8cmc!%H$O zGqq`Ck+(iG4JT>fO4&UPJ{vdnB{XLz)$|$>!KhomUv?;Tg4&w$%kMa209BP{d7aVU zWq!#h`|6}DA_}48XoFI@`_2E$%75m)H!(*Rpw8|@kJ^1}2OK$3%${Igb|}rxlUKJ> z%?z=m`%qW7iyt{p9<{Ji2`7kk)qMX!l=GLiE722jm*^(#slo_N8FiH7G>T<|cE=2JcbwRN>MA zB(b_RZ9$0K!bYz!CG}kSR2mjPj5A|rdPcspD8v9PBG{=W;<&IYYJrPqIP22}MeM=c zBH9GWxtd!U)anoLhL;UwI13l`c~$bjI3Y4h+0i}8OFPW@6(9E~qP$QMZ5WDg&2k4t z{COZb|==VVpZfE7HC9W9U>rkixmxY7FS$JIZ+rDIAThP4m zGx5j!Nur2{po^7As00?9!I$~oEGf0~9tWtA_BaSBa)Kp&e(5b!4AJ^mTZ^}JqMdug z6eX^zU=dlHr1yv>&ak3&zb$*I?w(vxqQ$rE`bac%{3r@e;QNoH6;WOgjW>q-x?d>w zbp_v57TC(TB5B%)&$i$Ni`jAk#fdJ2Z}zpyZWL**!!r)Dl_hYd@xH}nbf$>#?(Rze zDhyZ24|=E@irzefz8>S#pwDI7FGB2Zi;zrGW#YkZW1LmDZIE&1F8B4bIy%yum#ehA zNrxDsd2}aprML7SQT_O|EeH?b*K7lCs8lhq8pX_rNnfoxr!lgrQyD-{aP+l()D ziOLuKN07U*Bw;aO;>*N`28z_lbqEH?;)0BE4(MH)(+kPb*ltIa85Bwm-SpDu5L&%$ zr<|2gMiCFBGsZmXD5&w16-tB}Oi(#SA`QNt+Zl{l8iHy!vaSTTdb3B82|jUv`5iH>Tj-v^t!q8ycwe!juwV0 zcHH=m82UN*O{#0l#PfnESYgQ-njMR93RYISp`<-FXSy{yNn-T=H}gud+W&Yh-vlrApCIdRcW1z~L^VTS{1}|lI+heTGY$Et!LQks&;{UIR*LX| z(lRlV-A+KhK~a0#c9GKNJ?*4KsH0h^W2rj&^WA!B9N5$T*XRGMkMj4GcJ6IsKL1fq z;!Q)jq2kkb>lf5QAV$_r)Ik2rRg@6!?+OfS2Z-}_*n`9=3`rdR`kQR^V zfWWcuYyO4^>>S*he4I&Y^G!M^O}2|)&XAK zAjgMB!(ckBK3jQC@t}vhMZ+MMYA_ag)w-^_9hL^G*6MAVdl6Ni<(~YkzQ$g$mWsNB zR@^z4k*1a=>xIUjvFh8Sa@~e@PTL;tY`mgox%cwE?mc`D4Hde{Tf8SFuc@jWpsy*q zi}ANfQsyV84)&T3lJjM_M161oNg7@NZSpk!cLg5sDqba@=(Il%7yzu)Fm-8v5JBh80j673R-j;iEby>GU*QhmooR_h>o^q z;?W5DTg97dq0>sI-eL!a4i_+Rz&lPezXog3;0`O1J7I*H|7R@$TPc|vlvlpYTKxOd z2;gf%D z&!5gCrduuHMHRZ8UIqZQSL$`q0X3MPEGqA4>0>gkZL^A_B?Qyb0iOY5f>K9;MvUt9 zWiR_-?_jQkzu*gN5lXGOkmdHu`@WMaSc87usZ6&{zyOw1mbl5m#@X`FvOZ zC3qe1*!&{#5l*G_i9SsSnoPEKJiw$&#p)nxm?HXV$95H)O*l&Q7!tg+L?I^ZUITI~rVq9u)kb zXJrEmKEf(w0b!fK94i!cK7aDa`4I|gxt0AR(HxH*-B@yCNI7*rvV{QVZU&PLnYRZS z7dGZWS5{1gA=4D#!}ffko+cI*JA@*hrYLcM9ztXQAO21n>aveu%BbAj4(_^-$lp~e zS+wXJnrC6V=1YBD$adGHaomr0PVa!BjTA=Uo*%9Pf)IvxK%aE71`ax8IXM5Z$qgPc zD3cYk+W+fanzvQu_KklH=R8{%Bmx>ljhHkdGDjE=0^S|Ka&H;nyp)W-ag6`7E3s>? zEIwvAx>Gq3NuTTdOM?G?yg3T(cU25bj?c0ct;6&*-nx!H4(h^6`Lv?&?i8gSW2S_A z5pAez-LEg_vxB|nXOkY&G#`r!t^HaF(MW=X)Z9_VVQ$A(?gUIc%BQpY- z7EyoNtrBoK=nAcE`)|2@FV}ItWH)8T|G>3r-c3eqESsY9RB6x zp&E_6XPfg{;MQhDAoM@sh~il)ew9AneA`?+vSzHQqsaWbp{@+x zl&aGJSga6}bPGs)L$P)KV_E;Q8){kKNs8wulzU5C9o+JSHmULXGd6*h@K_c|A3^Je z6N%r{x8~^idfeIKB!INz{oSrWz|9l9{)*=6+;KJ^TYClabTPysLH9IGHJ1k`-->Ld z4_$|;QHF9+{B{(ib`29+E8xh7hvhzCu+bR_ln8XVBnSplZ(~h$zpQFw(RVNk+P)Y0 zALq3PmoekfX-{?vHq&z&ecQA%-CYw(le=o~ht#@gL4Pm-0={ZliH^J1^^gQ&22|(+ zwMsujbksu#c;k^7!hL>LxbU9_j<7Sf+tRfmZRR!fSZjql&irs5egxtzBj?s5ctY!!R1T zGoryOH1mf0qB(*vX;w@H-_-?M!LsOyb!%Z`bXdhKV`1n9W7}l>f_SQJ$Eu;@h}|Me zb-T2ua!*Uw9@^qvRj-^B#iJmlQ-xpwDf-#jlKGEIxm@8_iU}0GX}fH#N9td&!asUi z6>C%E^^{-?3M~B_cc6G$QojBDN~YTUSQwzUG)ZT@C}+C?iGIzc$F+`z0>D7!`4h@E9 ztX3r`=i9_3G4!b1yTo_@cOVDoxMEw%;FFy_D&+!kmgPA%Qg}6W*T;^0@pB|aC8m=3+_wphntWS30oh?qapiLd|HY3cl!n#gJDe+q{4wVsptx3&b zBYbcJKFE0r6h@vrD%LSeEH!JGm+U~)orWkslW(~StJ3l)RW&b~OkO7%_~LSmOfVbKL0 zTVC)fKwD_ZjPq~6;Q(U&e{?hA`XO-SzI&|6?uiT1VhfdJJ2>jn6fC4jV@an$u$pSj zQI7PHJzu%vax2WcHhUR$hRDx0OmPK(US9UZoeqV*E`T;LIGI3mnF>xnx4|RwUa+-M zJndfgGOD?M)&0lNN~ztESjV2b0yw6#^;#!ouoDLYcqCM80WfW_@>Y7vN%tw}p24rq z#_2$gv^t)k<0zpG@hsRZgCA1t8%*7?7Rp8#5JO)eh0x-EAF>iq$;e~4_Dr3uX`>JW zqN72A?;Kp^Qr+DwF>G46w_%PkWJ zxt9y-`UJarEC9xgkwK*sVExA&&zX072D5PNJo`dlAm$-tWI`TH(b4f53vKImll=f6 z)p;3webgv!Fz6l*=(Gy}% zO5Twj;8{fclp#gz!-(}$1GAeOe^(%KC9AmP>YC|4NqI?z2LFCGsp4jOVs{8pe=_WR zzwA@$@4z%gM(ia0TzgS!6@jWESZZF@pt(;*AObXZJl+}Nex;b1-BH!BL|x#YhHAOb z;aB+JLw;O2g=+w$7>*7WkX9O0IW-#wT(pu3TY1ynxLNLvTi+g15jti^4sNjbx^mPF zrI>{Ubv12?mK3jY&{EkAtwx@Ahfg1+FD5GU@m<8?wNp@-$xKBgH_(W&aYU#@c2ZF4 zVE~la*g`cDhGdj@ST7wk0y#XHba{w2;RrHHFbd&QB>Nv?+`KNslkNQ&NWmDF%_k&5 z%3c-xBL!F7@C)yQwxF85NJ22MUVmkfxjmmj$p*&IXo#+>lyEE})RX%>kMF^s`{6Q( z8lUJG|Mtse5ETlnGp6o8aVk8ZV{OqXtggUog#*E?OoDyyE9P2t4?dtQ~YG-1c_#gn*wCxenMgODp0O>gAk zKj{gfj~rLVu0F%U*C^;%Ozo}MHGriI%92Cnh+hcb@3Gn+YC6rHxsw+;_(VwRIWiEx zd$}%!a^5`&j*4<66tt9dI2jEDxI7w3F>MIqEl8DoyOy3gD~ZY6r7^rd`!mjz-*l!F zZ`2F;slNs9g;HXd`QB+1F5c2?S8y#t1UW7{Z9^EB;!CmoltHDs4x#eb8vuwNYNF79s=JDYeN8~o%Q>&l^JSv+q0%qNxm~4C~^&40& zoe+d^`y3a8r)FS|{;@E&h(X+0c6eB5)2zNMc?UsCm2 zj=Zi{F;3MFlzSC@QxpJn4T0qNzyP<$$K!LI78^(GmJWt3^q)=t5>1(^p$gt&xBY~6 zw(`m*>yh&f2o0LmgbZed?Q>853|npl5N$AYMI(0bDPYwBaIx(LIy-)GHgBcU-%MOu?cL%#5&PJh2a15LZU9HJl$z5fXdocw z)kzGi@ib3jWZ#W*Ecmm+lC0U%l*<_!yxFrUhVHD#M^I;XOt-8S7>6Ax_N_LJHdb#% zpPCI;G_1jhGHW?S5{LM(9XalhB7&URgL8+(3VWdAYN>@aaI+*IdpLh25OGd(Rx~zF zx4$~}l=}$K*$F5ppa8S#{0W=yTH^!R)yj`+*@daX<;@oc{u@aQW)E8sJ|Wx!nG%QV zyjX+97n-p-Z{96i9+d=M)q?HzF5<&2Y#k*!L=2i%hM(_7Vc}0m?a&+QPb5Z+YgKQN z^{ZE@TW3n%v@vT36@r!pHhH;Og#L5A#vseQ^fy-#3b`f z4gZ7pEWa_8{jcT+%DnSGxR5S0v)2D$JFOhd3j+TY61!|kqIG1uF&qBx@VgH)-+vXx z9Xv_QPXD9p)MPTt(*9SS{4&Ix_dlvn<}~v&$$x7}H_X-l(xU#gxh8vWJE`i(u~yp(=jP%(FxM6ImAf$d=HBElvb=fnFzVlzTORY|&SKP8 z{4n{uAjN;`)<{ii}}y9-y#3aCd3iZs;JHw{(eK z61`&X|0s(NtB8#?DM=$MF9@RsYx7|oJ!U1Z)!_XaU*IHY>#A?lengeRW>|MlP$0kF z^1Md$DlpH>^7?p?BhfVyu%o@)^L%-eNXGJdGg+!=Au3z|% zP9q#mHunvGfG1Acd;zx7q~(%e**0G_sBWRi<#X>D~pq&bGhMO!gW zHy3Me^L+P_eU-${39*;Ke=1m#!ByZ(|BJ4?s5FRR@Ml%ADC5pl_ku7Zgfe@M^V%0H z@w1McAa^n|k!gdtQl-vnSrSC97~D*3o*Vs_yaDc$hS^v3eQ$+=GB2$(F}y_CLxIE& zyJD>{9N@yQ10^p)WPa)=xz3MZ1~;^TPg&I{J3@wQi&idnkMDh;mHHJnu}Mt!3u;UN ze(dHOB_f3(9k}Rly1gl7k{POs+;c>|>bL)y2my;auBS zBOzlb!k`nvP~BF;iSdmWhs`%5ILYE;I&iDhNkAqe%Amfh^|Xp(BM)SxK>?#<2^h=0Pt7b*l2!;HM2H}(;qJ2uMJKD}+SuQWg%ja3vFT_{y z8^D=gAK#7MbMqRriaD|9Fmy-Q3tqZvys6XduC$hzHIzC-Pv`5bPD)12Btf-LRD3um zhRR+-uEUMK;1INB`i1EM_b`58yE}`SW!W;_fCK3(&KfCY%8U~ktxSwD_?LmDMI4et zIz)Uc135;ai}WEX&j18Yw5$f}VdvC~7}%C$8-xu}kF2arVQkaZlAr9-P1Qa_wIFLv z)9m8KooZ1VKbM`N~GxVknRA2sZ9^m51K& z$X*odanf|0mPjH@z0ms$6WOY|7ssDV@A99u=tzmNo`u!iSVJq zpB_ulHY7!YDNs`A zAoL0uIM{4Ad15&l+8puU)u;9xElb~KG!t$&IEWjpU*Fe}QgUOK09M{H2`u$>dz$8% zs9HqPRoPtB1jl@KVy9E91W1bo%4$?@Lz>)5ike#1vt$nR=BmXAR34iPNwzzv6D!@L zoA0v&VoTDLWe(xH%pcL&33||wC=u=cxoae6nI)?l z=cJ|~(TNL4IK@o305h)nzOiRDsZ;rPju4#cV^x|u)pp8JeOuRXWRiT1(H**C@|bK; z(~MWH=B|qxeAIA)V=`Kb8Wl=;cfzj9i_j4kjAV&s^k{J!iC@*tLM^9aZLq%B_C^|d z$a@DolOh_aeO-G6)_k6vjW9@Kbi0S@&79hyZg78&hxTXaEW zTBn$Jo-$jo%g8@jb!g~C0~adYg!A!+!G8tyG;%JTjbr!g;*9}Q=}XWL6y-DZiUM8Pn#0) zCawPv5Vz>-1v=qu*^1@lvd@-pZ^DtM)M%uBrK?-|w{~+28PTtAzk4zN?d#!te7Whp z>hI#_`_=x3E83A$Vb{;FKBz*#5$<*O`QizV&~fI^Qm1@d2n$|Wtk~-!#%5>$h9T@l z(ws&xyGGB{EnD{7pZFez9X@r3LZ)%pspJ6rE&B3Of1q;F?i}P$%o*n>!j1Olw>d|X z4vxV<6|NOLObME^!DVrJP<&h$$tme+&hr`Kl4SakE$b#9vM!)rwa&yDc0L3;K#1w% z@M-kTL>w|XN4ZUtt*qWELkK_#a z8u)V9zTX@YJfK{wi?=7DN|sL5ui-$grS-9CTYybo6E2~HHerM(b#XuGnXI@4?S7iJ zt6c6sL;QY)DOBVS5ZE@V?oSfgaBAbRWV zpZ2D+RT`TeztEK3wz8~3mtjnHgMD2=uS=;yl!bJ!>(up7l`J*bPODL)jS&hg^b^@( zMu+0JFK1ajirJ2}wa!`Wq4r=;3Mfo=;FB*>sMjI&+=Lxf(M<^28!ZEZ5De+>EeHB; zfCWN(Iz=ROR0N0NQPu5nuS8oE%~{C_)6fjiFpO-HZ#=jY6~mB!NN|0YjIWR4d2Q~T z(|&+G+11c*uH#mtgok!WYM<36BLkv-DqH!P!=Zn{x2yGddy&M~4*XjuSK+s}@KYn# zl0BulWH(ATN|lcU6snuZJ>REQV#X2r0VdUrZSaH!oJ#_%&A5_i*w2g-OSnA6Zrgf% zbXz&TUvLp4)flR6YVViNshp+8Gx0;SkFBqf0d$iKo>44q1YLAAHUxI8m4%VX*u+FB z%tKZ`ixkIFB8)m!>2T}(!G6D9yXtYRSM2oV^jkSUNq`buYT5-=oD^jm5}6IO1IMDu z)2q@y(XValRGc*v9?8QMImg6rsK*7e?+wQVU`FQ00{U@2uAVla9X`U}ioajVog!nj zX{O9c1d*-6JnN;cg`v{PK|UbqOLi;}p0WQhHgUo9iO_v-BNb2bjP^>LY0rBFIb3CI zeR$=&8R*TO<5KZ{>AzPVNeZ={0Y)ZC7DVH9M&S2Lb0_RzOs#YQ+mEE;h*CwokeV(c{R$ z%Bjs+!tOND2=Y1$PYFmT5O%%}Jt|wCyauD^B!iA(J>E_JUu%QiCI@!ez#Lc9aqdH_ zVwd~C!wFH$VQllRZbE`H#D=&XcW8;+8Jcw$eY2@ebq&n;TAP`oMvfo)Lny?-x$T+* z%A9pu#DgQzwc|xPQ4&eR7ytRm>W1IJ{s(x`)o7xqG34Boq|G{#Rm&_Af&gRGTFzA) zqOwxEj{HEqkl&ErB=8_0FdYBiPGbG{jELTn6Zx+->Ffjse-tYOe;Mlp|7I;x3bLK zd-to0uV+o=W2~r``-Hj&YJdQU{%dJzmz!ps}v z{X#l%0t4*_?Z@XQ#Rn~QBvd2xSvb0!^&(EfNAvuQNcc&p5A{ZOuZ>h`2DyB}jSK0M zI&zTseT777(wzG1wwRmXD_?(vCSm^78+By(niM95?o;YIxgraB>VpeNhXU!_G9+s0-#`8M?mzW2ah%M4>(91raIV$s)uj6j)sfYue)9u6O}WynjP%mO;V%jN zlOv!)Wlrt$rvoN5n&V$U`twKpYiOP^?xqlH#njjCqBG#s37uc_**+!NztkX+D~0w& zNod43kf4k$8f$1+6~_wR?tq6O4%p&hke?B5);q8#>2H(%{Oikvd3M7+F`w)XRvG=t zNgMUG!ihU^J6DkG)>Jl^G~E{`X?i*wE<4NSNeZ7%|MPHit^EbyeMeQOc+P1N#%4IO z>&AC*$NsExXiNVv$C_N7{*R?bmd?ya*ZD2T!6Q0bk#B>p>34{}q7e%rS<3oaL{q~n zKk_?az$oWbA@4>HKXw3*Vkio~DV_uimnlA!%?qQF5A$TIWdL$>i*YV!Nrwi7d!O%u zq#H(X=*Al#sqsL$LX2 z;qQ&L9DtG!J45KwM*#4rPIq-wW%5`KQ$tt6D_I-DF(LB4f%QxYWI!ium2v2bRZ}|Y04V;z~ zrkwy`Kf+RM#iNRhpNGkcmrrtZS}D@D^=vEQGxtRQ2l+MZTW8#<{FTeT)FX-vC;aP0 z949c@T=8qKr^7TTG#%td74MpmuRoHNGkJ|FhW?Uf=O1vp){#fyp2Pq#n~MD8z`j%p zEn5(VjZ(3USvFbSch?kLrYJ=J$e;>Y1D7U9o!o-F)HkoC#+u)9=+P8an4l($XOp)N zQxTMnH!KP#l@$CwaRsZVLyjo8w7h(@>JA8;^=!NXLbuE0b3%vHy{{DV2ifBoN6oSp zm2D466jtG<+HtmQY5KN6K!VHps8#Kh!j|eE%$+5Q}k%#uJr`;L2yVcJIOBDNL#arsSsW+pSupWxbea!2)$S zMEyFp-KaKD;Z8f7x=9-xIK60+j{b&ov%5JSvMmHMOXipg48^EQhgwI42)AIE^g1~< zfUaHh)SYA(!juh&IY|u{hN;SS9ck362RPY@b1uZ;0V650&J}~#TSok1gUT8_mzi(t zk9nuDJiXj}`G^9kp_6#gaI_q?N8mRa+|mO)kC?l^Zs2hQjncggfdKife6l zlCAd{`@DdR+ai(Dl8kxZcC4XS063S}DxG7$QMgF1mi#ke>`zO2zi@q`(zbd=-IB-R zOvpFH^dV`P8KxDY@cTa}3;|Q&EI*jY>4h`W;RE4p_M;ziwctaD;jKt@2mpi$(e@qW znnIj!PDSgfqH40>$|keYueNN))IY0oYtN;Iv*9o7ih6va`kf+4ST2x-~|Dcz)oOru7@~ zm7OEn7das{lvPg;?OMZ}FE(HxNurd69~;H@-10>XdLY)lRqKD98h2f4Q|QW__7_*3 z5+h5XJG$0iQtT@&AvzZ+wSEV4xyvEWUL3nSzSjTp%!hqtpG@yE^7e1`e1SdsaS0qJ zHIGm%+4wum(m${Dn?*L|MG(@w&llS~>%|H2-Uv#m#gl!mgbOoagEGK9TOu0W_Nu)M z{k@HD7hf=hosL;i?|FDh>Q_vcZ>!s#`R_#sY{Wq`zOg0EusWnmm8+8P3`hPaEc+1e zZ_)V+@x|YCsT=uEmQ$^0J%_B&XGoV%{V`7@3ITTylKhcQ^$dEPIN0#dv|EndwTe9J z!5OM7emKyusoh78j97q-^ZlDZy)di8gc4N_m1)duq4i;3n)Ku~K?5l`oRylOs%vIj z!MR>?|3Q$Gm5VJ~`Bpp0JosVLHW3Xq?{V^?vn{i&37ypu0((E9#xn=7z4=GW5Qqz+aJzS)-q73^?O1&9sAoa=8p@Mrp5C0?{JL*i1c?EM z#9xqu!)=r9&P8A6@)*1(Xp`PgdESAAw3o4H1BGDyvmUb-FD+r3%aAi8eLN_%~9e4H_mFkKcKC&4@dheJP%_&p+%> zp-%)QiAi_?sld{-O7{NI(MB_ItGflVDfW8A08kXI5JA`@SbVBvaYI7zQ-5+|Fr|}P z+Nssw5@`U3RC>|?$gwN&BYINuc>uY4#7qn}4z!F5XgGj-Xu~{Z)t^^-_i}iv4a(3Z zE^9;MhER;Ttb9LhAB2{;7}H;(<`?MgM&mDV2;ocopk9*B38C^6c8aN;Bg)Aye-MTx zuaJ8Aw!ZiDv97|2mw-}bh7~7HOQnfD>pU^OKf9x5e?qy>`L;Ytylw=X@&{I*S8PdD zKJE<8Ga&#Yc6w7zt4%m+n(b$atO3<0Tarr$qtswEe_VV|+jglBGdEs_>=1^rwEo7d#zQ7#H3! zywkuG!v!T#^OW$DJ}5#M6M3e$uZYlEd@uj_VIrsY1xfUf>jdvB6}lH3cxX90tQeNV zlE8=J2&srnRXmM1w;12B$Yd+k01h?Q-2{-@FGAwTN5*_J&PjZXfkq>0RzS`Ph(9A? zdU$gbxgbP*?$Q>u$dPiH7?}Dsf>!4|&WouD=e+Kp4^tFW+fihwml(Wxj0_DCy9rV@nEv~A#5wX8xG)8=o#aPx;WB2r@;4Al(9#|J zEC};mNak;E64Tb=kZ(Vo;P?gX;qrm0&-P$NF8#;>YAn&=%rvnBzPMVWNOZ}M#KisI z#VUpW$hXr&7MJVJtbF3-cR{$Fcl001xcJ5hPN`5Jn;?m*&EFF6LYZl=kT?d7^{z_f z>U7qewm>@Upm*L1BZRAewO5hk@V6n-Tx)}6Z-O<89sN<3?3UY_{+XV?T|*5RZdVf{ z`9AGn7Tk`y>EW*>oV9a1?&ohGMH=`z#wd*obWD*D`#HwAx?glL2<9OorUxj>i$NS8 zfRLti_-4~?kGf`$o%g+Q-_n2AHb=wt-S4cxyRej6*Th4qvkUKP_w7^FTPma>PRleE+JO9-Bk^G`TO{~rUDOx}3(0|lXv(_=br?rWT7b-pg^{Z~tx zX`vl7_N#6tH4)>0S~yTw?I&?V$fT(1rcr}8r4!)wR73mFUuF2@&?)sep7KdL@h+;5 ze;6=H;4KGP;mZ(qQW*b%J|t?}^uibhiEaVPuiSj^dM7-&H3g8+S6;8&i)y2}3_`Q0 zgHG4wrLWMZhXy}CTsC;5i~Xok_*IL@fB0{8LQdX!oZEVw18iBww*Jid5-D+39z&(= z6efSEOl~bc#L0Pr<3Gb;EmV;sJ4X&eA`F@Y@Q9o*fQp@?@#?E>edkeZ%klz4Dq67S zIw<-MLxWKG(cUD3%@0w9=Zn-m=$^y-_V0cQ zFzSy5;-ba^{9RL-ACMmPhY;RLo%w|=%&!efEc-d|9s*s2zE0$vDTclMRutjt8{xx# zI9!md!kixZ5{zgCUO;g{KJnc()9m*r-BVrTq~93oy9E51uI}ZHPKe!9XOBt`{~izb zHIj(EKd%6C0VNO7WKQJ{-}Pg5zkS~8Ra}Dv6|3kuKycK+Rp{kf^FiJLyEV1+BLK;V zQ?{gPWkfW7a~%VI-idefqU}CX%+G%ZLdWTD;Sxp~294 zyqSgwppj9Lo~B5;et90BZxsBOx`f>53 zRvzfkss`zz3b_0+zw(=qegL5n?L<D0hB=o5`E^m@?eUXC zW}M&*L(wPpf)NKqYOmDA7Pd^}#M;QG@qi8qNNMS~jPZ7EetMV}YDqMRNl=zW?2d}J zT2i3K{n$8qbqFqlPS^sGV`3T|#8bBkrL7~WE`2^V0#QvqdG&)zOGn6~>X4DNd*&IS zVa?tvp-w*mA<$@|k0bF2x8hmgS1*Y|!qV@F*Pm5Lhqj5Aj~8ptb~ZmNO{9fL{2|8) z;1Y_pGOyQ5q=0;hpL{tb6fOM_U2?UuHQ2;#1kbBVmdIA(g9AQKeM0ny+ zuR87DtI}a8!agYex{sms+_tE5VX=PfL0lXe?&GvBzUSsLCJplpe!&#rR2~wJi6`4t zDH<1@KD4r5!IJT3^WWljx6)YJbrE}7oUPDAt;jPj~qPI~=HU#?R^37C*e3RbWik zr3tXEs3E2m?rd=*WM^nuDcPFB>JeEnqcNZqS&NTqhY$2Lg)zXap>)4SXGVGE_oIBM zo7ayTh+_zeM`r2&llll?S>6LqLmQfy9gUfPDc>n;R`hvZeHGM)E}R6wQ;1(Sb*i-= ze)7>-tbTYimDM7QdPOA+^RC92O4@QW`FmI4XH6LMwW z^XvoE2QPYEXnrgxVaT`Dg}%n2gOv*H$$bkFBd5LQL3KY@g&R~OKVOi${9EKUu`wnN z^0>}ozH?FJ1QpqX@Rt)v5K#>vkd%mj){~G(X5JK+7_5xUuj{m%Qr)TnP|RdDcO#xf@vjURcy+jWEm<70*Nh#QJ2 z#s0q3)y>K=7VAafRA!4K#w31mA4WQ2pP~9Z{#6dC;y^GnmkkB5;#+4~SGL3Hmcv<6 z*THYW9?++pbka-pX**TCAO6BLJ_oxxI z-p)4_{+Ew^ebE~bxsj|+m}6JzqOoT<|H;8?n=RT+i#d+of60(OeMKD5HSPbm&GxUJ z*kmLPu>=LS4Chrn!x3u912jd&z9(M}_HdTr&GfN$$y!VDeq+4aCX#DyMT+ zTAi)3tf`E|$3NFgm*Vl59wc|y+5FTRf4f)^(H2S2VNp1cNf99aG2MTrep@CI@K-pW zHnko2#H>ZXY#2mU_}O`sGX51K1>=`P3C@UCg#WV;4pEGlK_0R} z-+@@FQKU?gJDs~Kv1^-dJ~vlg1pJ?gXwK8$UC39A+a~XW@QZA(Ggj^>rS|MhaUT~g z{)OZcnDDd!o5dNGrV@<=Dx2#Ib}nY+;NH$@UAy*rF$o(O2BtwD~!3z zKfGv$@J@KEHZTYkJdwA(K(^P@@N7o&2__3ln_@cQLf87ud9&TuR7E3EM>ZxBg6@O| z;gKHRst>9yHi%n$9JMY?Qbe%ZICKlsN;!c(Hc!W~;EMh%#YFYETVa)(@a~Xj-l3+t zXQCGnj>h5RXV*Nn|8nYwu;28*BQ12}kt^$+$yO2acjM&t52J^vO~u+Io=%%daUkn% zq(>$(X|rSbZatJCS0V9#TzzwlC(ZZu*tTukwr%g&vt!R^Y}>YN?CjXKZQJkuzR!Pe z(y3HVQr(?SDt+&*d(P>aK|r1}g6FS_#eguA|Gp0sy~>sCN3Jje?@{AU%R#dy-w8eq z_o#2Y)>B@{D6~rsrul)ihQg_9Ru;Ww ztci*VxR(Hw%r|hA@mChruQVs{Qc0#tZ5%ctW2`<&En@OEiE@zP7hWaxEkD1^U<{{e zNzkfqX+`kqdO}dd$h5{7dxBif=H9`Z8Na!K2ECzlPjhyJ5s72^)|K!d@Yq!e|MCF( zC}*#TtM|Quw+MKw9SHE6X3yBW0l&!gGcecc7K!m5 zk>()zhz@HtLM5xch~zwW&VpRxe?KjFpG{%dE|(u1ffH#?G5I?YrH2fPa*zM|IM z;Dv;8)-J^F9Su0lg?YF|$fWPCK9@ZC3^ciUn?C~e>W4BoI!;q95 z5@WY1voyY}IJlu|V@#u6iOo}+f9iI)>a(q)M-2i}x89ySMT0>;4vxGcBV`KPTl$I8qq? zrJ6#j!#{a{+S)GmB-W!KIJjM+@Jn`Lo@D%#QS6Rm2}O8-7ak|qFE=(cHYLu^U4c}F zGFg8!S_L+F+@Q`@@C_OtAkO)_qbO>n`d-fqRJ&2_T!dDj?%6J~|JpB@DX7(Bf?G;|8UqZ_ORI#p}5SIBqH8Hso`cH_>vxP8owfc<2ViJa8Iz*l#H z@X$!XGr9Z0*mdYGl`XJwQ0>?R4(L%kDom=Fgx8r4Q@JC3+dikQ)xfCC4r!=Jg-xt# zDc2Kr22}pQk%SxBrRRTOo+xI_B27&8(X#&X3)vpzia0+P(dh($lFr|fjQZ^vKID<{ z;}^klmz1j8_BE;pCD1Vp-4B&D=1HKG#GIFj0BGdEnoWOurL6Z?{xL%8OrZD`l;}5S zJXkRwYz-ImYZy%-)taePq17XEJUoO?j)nVPP6mox!g#WR+=(046RQs<|5iw5Y1ty7 z49J5MG4x1>xylPbp)rOXIIc;Wn%}5f!dwQstycAHS?#6KLYYP3SYC^++675B@jhCx zRNB*n#-YJ@0E)IL0W=uWs@5+xsbI;%XIn$WpW`nDWG=-SOPJK6++!5yb#p(=F&wIo zbBN*zS5Y(mhZR=|R{0l@AkgBI$tc3&7Ek@VQ+x+z4!k*lQLn_b$~ZHA>ur^Nsv>iP zF{CQR28aTp^`dgP&W7Q~M05W$(aZ~&5fu)5+!m1_jPW>ajN&H87G9w)k7e}OD{v#Q zigTtF9T$0$I>>eMAXACM0V;lg-LWN;Lx5A*P5Gv&$c~&P_2d=IZDNBAHE``f(WuYI z0Cq8P*sKviKmuP}9mA2I_e5DQWAC_ZMg_-zRd0R$(agJaf^yJXS&T9xua%qMbd-7S z!ojGvFb8PXACJTT`Qq2a7npE1NLGP%%Zpg5p;pn-(5iV!f9>vrqe|Du|RmUe~U(C=XAQ?(t0O&?Kj&36wBn0(OC!9N*Qw9*^Ox zTDFbxQS-?M_}#LZv~`Cqk>6~78J&gVlQVB8YiPSh3u&jwKlXII zS!J{7O%fy<3{aKN>(*WzLf|aEz^If%O;qbKq-v*K0^VF9#d;w;iF2q>Lm(^lGSRJX z9G)+fE11Ky9|@_^08!UFVaF&EzP8z$5WlPT*I^aueBfGB|Fye`Y+<|%I=WSOdEms&)045YEx-qk`N9n@vrHd7@ zKKfpM6iRn}hI%o%(9q=TAlz{(n5SNKjaw0$R3!&tdA#}Tf156%Yx}-u@VNfMcII2}S zZ3~h`P7(`-09Zm-{cgd3GE`Qm#C;PGAx*G<^dOpoC)d@9Yau_ag`5cHq9#NuO^>z{NhcsYjXR5h9xMK_ zLlaz-lJ9EGwR-a>^g~K`GO=sVCt|6v9@!*`L~C}U0r*}tB!%k!)qlN9O^PvlK#K9a z7HQ+>t4`6kiqV(pgv?3uwNE`m)u###8y4w>Ot(vZf5=yYAF+QOjkgzdhNL=M#)eUt zoI!nDj;6ZiZ{lfrW$tH#ZuE#5yss>vqD&#Dj%a*DOTi!>vZS6j5JVNkT?2m>mSB5H z;fTdj1L9${1WRdY+kZ)dj$&04F83aSEaJrX%V?+zc6S_F;e>38-WzJKt&oYWLY1_M z^*J39zUgZJ^-sfhQfO6Z^&x-W!c(A-Oze`ouu0Dtk259nL^})`W@=h#?yJmxu^U6v z&l5qojg{3EP*kD9o>Sdprt_>j%u7SvB~?cB0Cf4yvFaq|gsE{KB7i&X;M^!pG3(Q@ zTZ44gmMq3^wsnr2%PKIYW5^4H|q{b zfSo6SbyGLt4E=wJ2bYVHlZ{lES@IL!+-;Kb@~p|Cl~KFm2F{Vw(){7Je{Fbj*t%NjaiTq5)cBWnHtZlYdbsZJ{8X^@}tDblZ;t;r#FfWmYV zcIC)nL_I*+&(R4b4`{kt)%W8=B=biGTVYT#;{L7gvQMUWrd&ut{i;Q%F|(m_P2*x-Rc>L4?Men-33s?9741lUjo^|kiqfRS zq5HNi{Hj+6;nHSOp=5sjG}-xBUQj0Xl!I_YJOVwQE*x&RK8-%^CV{F6pyU`&HPdAE zt*km!QqK%#VBDYNVO2V#Kf%dtKW-VEo}QmAkZ_gYzy@eERxoC31Ek*3^;_l^$}1J3 zSP*l^#?o%MshUvRWC<9PHx_a-UJx6&3we-M^-KE61{EF zHEZw9!66ddQ7G?apa^?AogtO!hZ#uXU$jn|==W9#~C&v~8So)cH@NqB3 zek2_h>NMjkR3irfH=!~fvO9QriL8p9w0-sogVt}A`ON0axD}t#?+m$)OPplK+UuQN zz4SLa*~Hh_G6ol+WyQW`Ua!Ac$*G`XnQ2}&rD~$_4NSt}q(Z5yH2G87WI&F^d6r(@ zZ6T=i7g%ek`kkaoBIIZe_N}Ew$bG7J!js0y4B`41lj!{bo$jZL$l0dNc%Q`F2l~?r zGc8oOY*W<(>&7Zrf~-^o76@WeskDAAJUCP(vBrx}HjjLZRQl|Xm3Mu824|)OI>owz z{#)DnD7E&J#7%u!Jmiy?sjRk}>&*%#RI|y zH$X1vu%voPk*Q^M);CzG;;9U8&};n>0)q=~dJ0Y=-=(vR}E{5pR)_@|YYD@oUy0pBlRVJ7MBd z{BvBkG8ua5*NLgx^6_;2T5bL*pU}ts!A!k>+q4O!pdqMKbRtpJInT3Q;OvZPko1`x zCYec3qok5B^{s;OBt{naSt66w2dKAxroC^r`f0nF;?3N;0VPes+<|2J`WQ;H+Ller z9a3Iu8hu;wDGPT?b}w-D3u)7HCw)ZZxh1(LlT*`pkau|SIN6<@^4v{h5#!m@GdsAf zbSwKndBh-0h!3y$>(0Df809j~^krViz=_o|Pot zDmy^0knsv`#ntzi&HFz2PiUM?LBFks3J9nQ1_Ve+78DE(2ny3uK6ItsbiTn;{n4rI>agqe{P}PRp|PdM#qRxmGt&gdKb<=RhI*ge zq1taw*|bWR=K90yb|Jn4Uv)e?W%bYBcpE@fi{vkCzV3kr*App16A%DQAqL?R-RT{4 zMV<>EmdQU;e|l@$I#?Sd+g<)4&V6yy9!RcHaAsjB_)#I<_K4gwH(L{97Tq--aacdi{G%EnjEGD%&(z*E7j)t!)eL>IqZk0;Y-@ZD{qrG3% z_fpj|G4xGkgzeRsMFN9A2WKWRX4H5>ilRnx+QvJHp4F_}ECP9d= z>ec%YsFnnui%w`jW~&L-q=rdBd12O}5oK&bqYAtgW*Q2F0VYHrcEYZR&`$wmwRTeZ z?}K#O3l=-RE;dx~KyVLZ1*1(DK-6&&tNF_nSDQo*TO&6sNW=juiR9GDUzir5<{3h%&2GZalrK)U3hdXjKTObPGHg;rZt?rPlr5v zB99K0-X90JrX0~IDVYIygbtxN6G>2XmJTIRDDk|>I-nK?g=9<6ft4YYl#Wi?bT}~H zn7>*`_S8+aHqm5yWZKUQ^akT$wnjSR9w;l3Sht~B6>QHk#v;LIPrnhmfGT=z*9*Lwaw_Qk`cj3PFG}m|XQZno4i^_tn3E~rO->mJV zDSxx#ph{ZLBG~`dJ&2dYb4it7t;~`s+!+It*b)-@>K4s>u#Ykp_CcAp;WHOm znYRvhBu{GNZ#FDL&4&Ts57+if%3b{w>Og?8Q0B0PFA-PGU;&NtMA8;zQ&=H$S=0tm z(@mL5Qc|ts?ReD$y&uFDFzOtGR-x^SW?e%=PP?B2uS^9%=3oi?8ZM=D02jj?uA(+E zmAF(q)ljvWFrSS3F!yj(Z67(NQ;(M6a+OF>maJellAyyfUpB%<5PmhHz%h@c9W_9V zRF5iy0Gd_>v}w{ihpWj*%2`@KTh(u^I~`P&9^He;Z5jq&i*4SD zLRyT;Ciy`nXxuVU{ufIcI~j4L<$DVpRhFxv1jzuOjqdmlq0(nq6TEl$SP%vQDQ9xS zvII8vpiu&| zkAFD|ha}M_l1_`Z;vRiXls@H_LyTUylBi$uDc#if>zDe=K={FiZ5`N0u@@x0{_5E6 z^xivOtmEaOeg`NgrUybQt?_6!RcxqN(rj^`9D*fR5(}>Q+a={j!4+9?mMFklpclf) z*Dia7^A&aIwv7e5AitDwTC`Ub?rP4ZnfC*$Vw$c9xW8HyKcH(69DGT}sf$B=!V`|g zgS*3zQGi6xE*OeD5*twO_$IrQFP((c$?Jf3QVxwut{&^+;|Ts zj=^oZN2iFua)*oq84U$3Hok146lYzs)5S-}&9``szU^nbt~R(FT0CJ_LJ3oc5f)8% zu=YyjqGS{^5eON|EkP;{V#D51o=mdC8oN>Dw9N@?%{w7{5wATH#RE`r5nTTA;dF0P zIsNT26MEC#C;K9~CKRrHXDa=JO5}7hr^*&Xq~K&4@+YB~)ED!4vvw;gI&;~;c0j1L zTl-JUW&&Up^KC>pGW(p79DDa@B3DENk3)6Rzq^}_&eA5W@_O@rMde=?fE*6uUT+e)|i%w zY7{}n@LCS*DhHMYC5?8UYb-F=@1$l{do9UT)2Xj`yb8d-)(hC|n~4{s$9x$kUchT! z&GF8-tIn0gV4q3N8l?LI_qqy>zyg839c*$l^Z8OsVw^5TPQ=GuUu95?(}`S+g+Zd+03kL<6jeY z3p`5nuMe+#VvQwrHK;jU>=ZGjuB|^9epeaxWJFJ!c0T*mHykV8PXNSvK5y2=(+R=P zKUVy*^{@GSo1aI9*O?-mu}{vo`XY(oL^8Y}-x-+|l6H=mFgx&KNCnfx24?P8q>*yN zSh(`ra_g>aZ!Yca1-CXm3v)HfdJYPEv?)7p3pTPg;yB$2X82v&`b8BP2IR_rK0BDh zAIQ`l42xBUBMs2P0f4uaqZK~KH+KsFUsWEA z4}8&#gQnFIT=`k0K2gN@wqK?0;*QnR z18ft7ba;zK&H(Rv?$s>ZMWZZc8WO!(Sd$?|ZaG2K5pI<*M(=5he&}dcIw)c^OvXtz zWY#|VZFE>@c41-B)1GKH4Rr{-U~A1|X|FcoPcABr%UAE<1d35BEN&i3ipAps_`?zR zeV@d6+`(nbY>UW@J*8OqssO$hO6A-;#L0Z*UoYkDIbEqqXpQXrgqi{(={c1>+q@o}~r2u=QzqBp2CQmNJ3vAL$&r=J$;4j+O zWjNEPh6MO{0#t4SQ*8P^8Si1#_5#F&XKvbAdw)J}ID8%~9|o$-d@B^#kW4QrpCnm2=~JWZYd(=)D!v8E+n0^; z7Xk=A6T-7|t!4WB)cU?F&mR7r!?Ou2|Fn^}viS=1gt~_n7KE97qa8C4&eJ*ES#fkz z2+X6|S15nIUkukp)_V!p0lr4dRu6G3J5L1BW>nH7aziapL3&oc(+TvAF{~)E*m?j+ zj2dk`S;5M?`o(@oW1U{=y(3Bu=BtE~NdQ>a{_vlBi?Y247|>s8m>{YTm6%(V5)*`R z=t>`KBSd4NHiG08`J1XcUD?^5eUxdAGzYNQF`ugw3|~YY%!V}AfDeb~?tr$YVBwh2 z4frSWmn+Sa2Ni_6#!rSsc_`jmkl_|x((GbPgF@4#of(IxAum50jyz}c)*d^DdO%n9 zfJN2@Z#=>CNLrCZiBq;I8Fw%WcX>=Qj!s1afc^mU{ADq28Ix8K_Kd9`_q&;MUiDSc z4um>DZG%1j4k`P!6f2Q7;>MCK_E4&)OjuU0c+B*(+sVl}4wrYYKrto}$t9bML$?{V|0S%fqd;nt5Cus|(eA0$tpJ;M z&G-K4>SVwemm|6H_1i?V6A-g0hIL2PEV06R(ZsR((Av}UF}E(i1`Y9|w=2yQVM?9< zrP5HFyW{n^#TL;B5K*o5_3-13tZum)KoM|1c{7E=dATNHg`K+GGc8>sbE(4_)F7&@W9&{DFlAH040!qbIYpR)`jVx@ zfX;ovOy43Ufaq(063uITu_xMEKHPy#5b5reJubI_>hmiIus5Bk$J^qnwU*JDcOP7+ zTs)8O?1*}tc3vgpD9<^Vl5A2US7}Fwav&d@++AY$v8FzJoa0zTwM{Q=EZ#NE`m^3% z1}gYM{T<+QpO7eGzS#b{%cccf6w^lpm3xs<`g#G*r^nahncLQQ>)aBbDnRz zbLwoi)!teSVCZuey>OdJLb087M4cJ|(AaW&ISN)>#PAj0U~gjtnun{dOcYSvPk%IV z{qr2wp^|o8a%nJrjbuGL>(}F<1tr%JvleAl{@_;_WMI2#m3aQD!E>#;x}WFR_VgjZ z@k++UWi0U?*O2#KWF@w#OI~uim(;Ej%$JfEiHrXSU|v=bzNwst#a4V(B9uBvjEA@GMU_gyy>=ae#89;(KThcvO_z@)?3ba6A5?iSP&5+kvV_PbkPz-SDcsDwpW<)R9lLw7oo_fzB;Y-5e*FC=TXuq2L_Kf^20 z05@SZVCx^}C^^k);vxL%8A52K-%WHt&)Ch^5M*4cII8uSsyG0A8^Ct%Vk${^? zjp7lRu)=^s-s_GAxcc`Vf{<4mrZM&W#+Zf{;AtA6UFd7wnhx0Wr5qTp2x!-AWsI+| zJqPDSwUDst8B>(r|Dh&teh+8C@Z!m8my~;jP^Iv#gUZtTmzxLf@daYO`Yue2I)S-8 z+7{C^%Hynpk?L#OZN}AUmKr(+2Q&@o+&uGCX#BQ4_uiuWkNyG&QG;pCLr%Gr` z0VH>W57ho5yqiE6-4RX?QXl3E9*?^%1o=5ryUzb|+@*G~O)Nd{O6UZQHccu9BuBvF zk@rg1d!<@+DK>%_5S8pR;{pc^Op4KYr^6;S@C-|81P4#wq6%d7!pF_C|9?BPZtEN$e)hYczYXN35LiA)d|o9#})pPGBU@ zZ2ZuU-ANQ*U&n;+!^|2`dtzWTQw;R+SCUnR%auFqAJ_H`*Xe{H?d=e zPQT90Ld7_lfuetYGyPMvALi0h)Et_z9{^TZq0+LelG2#<$lN(Dvl*?KV#EJDc-1Mb zSpV>mkpm6XccQ1YBHitjpwBEx$lE?MBq)c^rQpm+*Xar12l5Clbx%z_xSSYQk?*TF zFu~Fy{^MBefDQ}4#0BqV;ycdt7k*c?QUR#M8=Hg89SHLBm4uiEU?cW;#mqtpxd(Jh zx^%LuVh0<{w2;~<2j!-8%GBxC=Gc<4RYKD03J$;!c|O6@m_g9|17;ZqL*r3LrIsm0 zmsRW8n7(K`ntPFK6BnLczVozfiPtJPBjZlcuHpD}9UT5eWSNdSN5j;s&LL4nISV)v@bG7h_4kPUcS&c}?|V2pr=&71h-{w=y8IPCuaKl05_BnL<`8_H zT^Py6YbwgIey|-Srjfw{YN$t^$wsDL%KdS88zCpz2yoW-eRvd9885R1_uV3P z`X1eL2ufe_Ubs>9+5VHd0^k2)b^TCnb_$UtbB2dL0T8Ne-c=R7P=0nESU&cGTJ#Ce$I$NcU~-+ zNH*OYiE^H_QzhywG9Cfr`FH?b!m!Ep$>A^|W-7aZyO1TMe>$Nk{}r?{49VLVtsPMG?vvH)jn;nffFc z>Ws~fhk@SR6{TO(Fi!Tye7;&+l@?`5Gr>0Z0&Xz1@Tp&g%?H>P`{-dke?LGLQv3!I z8my*ELz#rN+IOK>3>1UM)Lr4RR?@MW4=t3Qf=Zl;&UA23zrJW(~iZzw-eb=NP+6I{TL!v)-gn1G_CBu(&pX z3m~}*IDHM{zGkcBPqlxz;WP}{IlmR~-b>N&W$l{Asq!%Lsv2NqT1C>TxOE8vKt{CM z<+r}43wyS9nNKpcf&JniQLd=73G;9=y~iO=hwn{)XwI+d6G^W`kPkt^7ESC;AK%hF zSiYnG02|#4Z}`ib-aoar9;Pa)u5LU{2Vki0Z71B>zhrj53pyklG%(vofW@)Ndzf!BIaNb4Jt_>+Mw-v3YN-&B$JJRtFwD0=90@Ft&B;fAM zN_Mj@Z#Z_atc>2wU0_|%F5nr69jOXfrhMY+Xf7+rY?xnikq#=0ALj*6uGN2y0&^y% zyGwc=sM9^SAdo#zrR!Xa4Lk+OFqVI(AJ#hP`+3KI=mQ(dGbKUOxC+_F8)7%h?j9jq zdT~I*{s|no>I#H07Z_`Fq|ZX`6L6r4Wy{KhC$B1f?uD&QdWY z4kJViBPt{XOk_eLjARTnjD^V~0_Trix4?_YhkkEPp9oeMsJ?UnbkaU2`_%9Bg`xs z5YPAQQ_mgg&C!gBY&p@+Ycz~#)A%<$|3;EBr^n1NKj#teDY&rpAjjfS9TsaE-yE1y zULOv+Uk0E6V7<~RY922hpoN8h&wu9a{WY`)SZ^M{|_p#>iY;-2AU=zAmnO%JSaLXm0 z-S>QbQ{zPlM`=|N@6$O9#?Ti`v^zLCT|4yBGY|bopkmfkEme@t4zgDjV;{jF=aa6T z_}ZdTC-W%)Ji}(rASZoa^srZ`sitN~-t_rKN7&$NnTHaRr>jDt7^=+$PnP5$FbaR>S^XO5x_8ie)>N*4SGLh94C={1PBy>2y1j zX{cZ zVaP@@0){Y`*PdgzElbP^dy-H9k2{<&&K)5u0DbVt*`U{Y=0711S=mIu9_UPdIiEC5BWKH{A0X|>=@6OmhFmy4 z(_0E63^h+P^-eE?QVT<@F|91YdxZXoo(_pi-TmD>POKEg+uigZCFSArsq zgSipW?ae_o4F>p`v2{iR+PUxSKEnX4M{rcFNasLGQD1ixDPSCwJK|nwVV>n|m(`ZL z`qdTOi4BC}?k?e=sHeuv6}7FP(T)5?LZh&pku}#vL3++oGlDhgI7W5lO{^9Z*|cJF zr_H$eSt9N^C+kma!iw}rBdvsBE{qqXMpM!Bv7mw+cHqM1>Z1FL;g*+Sena)?O6{jB+&G39?@II);U zx%?4;f@Q+BScb@H?;I#+5zj~DSdxNxc)JUk3rwuk?qOE8t(APx z&GPxNi7&MXO%hwvtSU9slILlzvrOCdOBGII@!G^%x0K$UZ!B)6k30_W9I@`ZxwHPq z%Qh z>$U2-PzXY{NXT|)tj6l14txSTcLM37z0rvG^6Wc>0hOZMu~q}n>1hohx;$0KwYB*S-j#6 z2=PII;IxZJ>=e5KLvnaITLf<8p>*hgbfz+QtOw3g(KV?R3_f_kHCLYMoFZ7gv69PsaERr^`PPqdf83NB};}FuxB0hRR~WaB#+LMUKx@Kn9^LxJX>*L zvcn&J*sP!Cxu)s+jBcod>c7TxWYB&!SYU8~Wr2*z`Z54xlYNG60BsO%p0UG&Oi}F{ ztV59-vfZQ}5-$60=zctqVE9;e72aTBy+)RICVsaHlamHUla8Nq8?A>LsZFPfLKZYg zG4MtnG^jkx-w8$=NNuvHrf>oDluGnZ*(_W~5RbMDqPMsMn~c(5MBZ^Y6%t6}y4=}^ zP67#Ol}CV#K-Jb;H7n!128m6;d`?mvSl+2M`H_8HD%~9Juak(krp;8ls7xYeYA=9B z8%0Y<;f1j;Mj1ybrF)SPb_7^JBFn_|J-B5{E-f3cvw1Cy=tAKcPnYO1R3$k`>xEbp z_0%-jTF|liFY%IOpmNbjV>k6j$Z&(!@MHN4tYp9uED(fOoaymkZ+$~L?&JJvrjzR5 z?p_U~p7^&mX+OTPk)-Z9yP>|+cqhr!F0lt!5{HRK+cKLn8=nR+YMc97VN3BrJGP&eUR`4tiVc)m22D8s{{7a+A@t#E?Nl5 zH6#FxGtFoy-dr#D6lS6K9gw{l-UrSx#1TEUnfR*%OQJ^vk_p8veTK!uSrs@i*Y0(| zW!%5tHN)b#bXGYx<6{qw?P}8D=TOTfI%Z(@g0`nKRoT20uYg)jxbyKR;d47Aw=SKRd1o%_k0S%=G2GoES8z76oE zgqMkLA_8@JKZTc37@<;QrlP{ndfAn=Ro=Afq_afDf$vFW&bj^7H9aNw)3GU(0{!p5 z-B=zy)H)g3cmEdP>klqt?PtDjD(~Hgm5^=fvd+Zak%R(TZG$9w5BddkM z8_E#F^gIF+IASF=o%Qx1a`pj@bOD%#clS>`VP0^Dw!vTf6ObPuz&r04M3m}pcTo=6 zMZU8%KhflfVqs>Dr5@T?o;hw@N72$V9>(F911Aunp?zADKQ)C2*YYKrmGuiKD(Voj z%OSD{4C#jBX7kEw@P1l0T;wWGpBSAp6@f&3!;kZ^p!X@q%xp*c+W1q z&(a@1N9>7QRZ&c~D>tlxFv3fPD_&^`4Zt%> zu$#W)#n~;aq1g*^GEPu_qrw*8??9y+pnb8uj@jU8()*bWETr$J08oVx0*7<+)f|Kv zk$+^~Rnxuga6%BG)+I7(f}?1iP_c5DhZ9*}0n{|iF_dQ5T!YY@0G^>W^cK(wnBX}u ze_VhUlveJ>{b-5;XhPs<%ix({e9y}#7|Z;sy}vauT*ug1YWU7k##+y~{*B#dbmu6{ zGINSWaZ1^A4JY=-vo5bSA_F z60&s8)JESXo6zhJhIZoXxIgJ>5Vge(IGQa=^RFnloT&+bAjj(b9!bLePDsw?-$$L0 zyiATXAUU;PtkQu^ylUV@jNWhureIDqXIK7^U1Q#U`c~ z*9+dzGZv5K3g}Qd9wuHtT<=#8~a4Gh>veQ-|-eR zW0;gHuW${(R;`9o{Q_*ex3I-SHj~H#@aFE8RVclUc%{sj^ML)Yk5aOh&Mx~bKLxV+Bi0p3MN zXha@+hV4X%VZ(v$Y0XXP#A$d*qbB4rC(qX*_SWmkLr};Z+R;2svdgK`vm~0QTxV_Y zX+gdhT%yFC7ki{*tIMP_B+jqJt#KL&$x+|^suL1v`ixtUI%$IjM$Z6wwKCTr3HZbU zW~K-rHAQ}`4!Ile46u|k-XhN7F2bB_oOmPj82%x&pJcXY#2E}gAfn#2fKY0Nh4f0R zKj*l1)zY=BYXI%>v?E?8%d6UZsRI3y<^1fNuxmN#pG*8#!k_CI-W}(5z?3uUw2@FI z58*$QLii>y#vpM4h8HBh#5)yPyIWM%`n#2YV8&;GfVT8mg9xP5j*+t`UH>Jgs= z#@P57bER%|?eNx*v=cL^l~qqEWpJTz6Hu+=Xj@M4?VL+nKa&X;&WdA@(ouu#oIgoH zS<;T5oK70^urnJ`Wf~eLygANq}^rsbI z7lNQ^|55R3Zqx$qbQ|B7;xE^vmtnS@(4n%Tk}{@F4rYlsL(eC0s&x?KH}%(&=dZ4j z^nR+Jp@VVDcB(lYY-U1-#|{@UK9|5x>)t(=#ZT@&MaWo}{3`^{`gR4b=z>4-wpw;h z9nfXoSatG5_@pu{kfACpk8alw=}io=fgcG+=9@2kiVsz^|l_` z9*ts7)uw~!x_Cchw2Yqtc<1NMkEM#TS#n_r9$j`|4w}`#A%^@$Amr_iV7xn)d(g|i zI=R@-4h2udM+aL*FR6U|!CiWM*3I4d*GYv@4}!zpoHzP7hn}IW>aA{xufb&ttAi4O z-@Av~4!k}r6pmZ0oRWy|^u9K%yuH1WFTZa%$J!td7=i_CT& zsrh6>lIs1A{th6mb_+%42VInA(W5*fO@U%o|SwK=Uu4({PtV%D(ws18zdP|j8BWGA|s6RRsU<=Cka9;cHZSC zm=?X5gR*a52J3^)3v06jNQwhBa0I+hJmp6U=ySzr*KWxJie?DMY7w|(s3r2gAxEja zsSNxAyQnXvK*>Wax%-BOu4pZW)wV(gpM0!c?YcLCUlET}{2KeI-7FOCgYxY9qqHnM zfT$LtRlX#y)eedabIWPyC7N64shh+~^fdrgJr|`62njgy_||tPor#)ElA(^D&Nk;- zmoX7-emQP{e-O!s5EHx)%)k9hRe~@`anC&wq44w0Yo>|c4G3}HRpSK0b!rBBi5<10sQCY(2alj^2H*QieNINdXf(;||%d1GK22G7g_H4P)N5K%QLald=G`wCo!G@b-)9vBpxlX&VHSF zRm8uwxcFed-&+!S#9ig2bIk?6KI7!}wfV(1ZfJFL!4XZ)Jh8^0ZUb7J{hDEgEwEk; zKd0Vr6?j2(0#XzSQiAdGr5i=zB;@7+UwqfRZ-vVv2m@gQV;4)E$S|q*EW8|1!JW;6 z>nv>upy|*Jac|P$Qx#32)ce|&8mHTS!6B&CjLLj@aq3d+_YW5YQ)VSx5L}sUyeJWJ zWTZ@ymEaOi%)PyW0he07S!e9@GA!UEn2rs>wTzC;!4dUPgO6qpE=rsJgiMP768kWN zO=#kQFqv#gm7LuHlLtIc#%OE;$(6CePjZ!IBgT@Y?20uzT%+Q}M0->bhjG`uKwSD18r@Rzk$QmnkKgKmV zbZy~pLu^x0#7>KhE)SPN?&f8{YaOfF$lv7Acj+o;)IQ)anGKETdOdN*k;gGIJ=Io- zUnfCF7H)VaDz7Mbr$GaLGxE#vauOmVJoq+5*>Uc1SO_x`dSNo z(|`lz7xxL2UUO_M`#!l)ve`uS6yrn2f8@XXI(mQva-%xI8PX$&MuE{uf&gugb z(I6-+0yhd`r4W2|FNF!X=0yUX#c0jPETX3nl~*_Il%#TSWLig3fl@`FM|B)MkErCj z$%j+O)Z$v?EWJ+qG>s53Axhpqss1L2W-_4r_2phUnQ)ehoD5khG7B%wfC@T+v$bU6|W%lbOs~brOO9?OPQ`pw!_J@{Xzlo{6 z=qK0IA)I8@`<5`kn6z#|*+Q8*h8xMP&}XhBC`=I*EB)kakk$MkNecx!2ku<3RtY88 z!}^MQCa8m}db}PJGP%cWt#4WprKYkhEtT)%{uNVJc5EnW*739LX`tESow5#Z4u5-` z?ct7PdgXpm%!)jjaq(n&wVbDU6q%;nVC^Lx!(aNVh3O-JMI#ni4u`I`7PV6j>(O9i zW!NDPupE?fU@5!sWG@>e>v{V*wUIA$SUM?jacc>s=sujwCM2n+yv)|C%DM7eP7ST+ z9@zvvZH)U_K8%uZ75)=!uF=JL02;(z!hQYkqZ_3JQu!op0%{n&mA8*JEH{RDmM5>! zd2$hAb|6rIwYikef?}7z_fadqMPvu~)iNig(l0Tl@f5G;EN`H@?lxeUjBx^^9Fo5d zR-hJc3I+oDKkpXw1Pr={NGv&OR3mJ2{R(rdk2a9X;d_b$+=>FL-(>)rF9PP@YKyd1%ZYHNkL zm=dlAp`)9&0xh-P%M9r9EcUH(olsPo9J$$$AhcKoLuhBi99i0Is_SoM+sNkc+QQZ! zs}iIxvWsS>G`3-wrIrjHKQ(rV)ls-un~7cQBq|{3QfQeN=}tIsop$DIW0>~rV!NPE zS26{ZsBeyRE2pNnNrAYGIC1_~aAG4)ulsSDddHX#!&~AX7Sq#LtMmfL zhkH$iQ)2^#LR01Ur)De1k14vI3K?p3ce(&ueEJ)gh5j8g{EgDdS9tXt>B*n-X%`q5 z3kZ(^F+wg}Ebz3LPWc!sruyaKC(f5)Z%b)uSvnu)C>5I=;XifqoHl}03~2B1Xdz-5 zz3PDpuvx#OLApWiQ$Z%Qg2Eq-ZN@e0i}XYOY3LLaw#9d$<}ZLoh_NL+@448rQP)9(L7)1#g=Z)y^?0kayjeiCw#_lHQ0;jO*2Z|7Fgz49+EU+0SR z6_}_-5KV2C|IPw#)WRbF(O|uj;XcD8Zgjs5lu2ZlAaar7Q6Jl(6Gl?qjB}0)3YAc& z%-z&2g?N42(ffGO-V0XFv4vRXR@VWcG<@klXFGy6G8v5sz;}ZRC1|7N#sWNb^4|=} zt0ZIWB59G-l;v-h6|NjOZW^oVU+o#t{;VKA% z?9B)FLvo9B?#lDZnSBw;um*wDm%vKwr6Y2z%>xLvaaPpUwTj%i5_yCzTT?1yRkd|0 zA=&&L8!$Yk7HwKCne27Aaku~zZrk3=yczNXhsZO6xMAAzdEC1wy-Q{D9jTIJ6r=h& z+>m2868e*iy0vb2*;vyrj+eaBmF5|oAwxVWxzq?sgntZqKV2p_$fSAwXlGsiAUbWW!1uvg3ENctkzUL(E)Dy>LpY=pBofL6r%@b#+n)n&Icfr<1Ax1F zpjhqp^k5O{WpoZ9o1CPcZt$mQMO?jU=UL!V{LenX2WTsepY07}soQfv&yeSEMt>FO zTn>JX_l9Aqc@wQn1AM+U zK{;bXCU*l*VYXx->O%nbR91EyrYBu(TUUQ4)p|ZD4{vdd9!LriVnsi92Er0tdh~Yj zzr3`_e6nxe$lhG(Xi}`uNvS}>kv0VsOrn5xA3&*`Oy4$X$*5krW5Y2H@n+7&5$dxNcaAMPZ0cTqaQMxbq$vP!fJs=Sj9Dt&l7oFr;N;W%gQN z%FUg2k6`n-qpK~<=HLhy-j)q#d-cSy>=jmuS3ySt!8X|T#zwSVfOPhhiVJ% zdgI13?Jz6Xv*$Q4>EXNUXl=1%4{2a}L!DO(>Ngy25@0PJ08!2vyD@w@xisT*L9p%+ zpvfKRdd>D{gLR-u+3f^dXsnIi5&pN;GLns=BLZa?*8?(P^7gSD@*XLOhK*wKe9k}B zwuXNfCYM`!a5MYb5pD3(25!Gvti1TIXly4Ry{69c9n4vuEKcW@IlB+VYz~k2lH7;s zpyaZjrvM*1vG}a_PVt*Be>2aeU7b1~=VjQ=Q#aVutK{|7JM|sYUr*YoiEctyvlok! z$6*{!>v$BjnijSQ_Q?`%XYkDvM@n6RlBD;>{NDuYM;$^n z>HyI3)7+_NQRyp&Ucw{Lfi_cYOx2?{i=$ZxWdpm^rruvqto&m@Cc9i6K-0>(D}$5m zemwHo#_E%&EayMX&oI*GwMok!5Ka96f9)vt+q*p7>}z>V{Q^N@4fTMkv)vgKqO2jC zFPWIGfY;3&b>6e!2@Z?6qnkR3VFb0C8vv*I?p0ttGW3a@h2SG+LeS1yufs`~ZXhv~ z%cCln2NF!zU0XqE*I>27TrvLt_JHC8&$B`PJo`YXI)2J2FjD&}9Cn8GP>A&~o-`N# z%Y;xftZ{_fBH{E!QP_4RpJQJ}9N>q+{YL!WxzU@xVXrt`3q3duBmIr{S^rg*X$HL#ke+2M2>Db*bW3G{ryP; zhd={oE6i}R)AsDGBKNHO)vpc|c%j$wQ+)0cxPh_|r@b_gOj6$4e!MrksyA&&zsKD0 z!rsY~w@(cb8H0=6q$xRn*5SLyGpDePR1Jq%6vhQhez00%;4`5)mm^3~*K*Z(Cl zd&I`1tH+ZZ09F2A{M`84Z~h7GLY0r%#KqSyWfi4L^09=kN#TJcP`HI11z zk@M4*H%kQWdirJVirf0JoGfCBvliAG`O~_X2y63HYHO3k66if4x6V|X51K=_4s%1& zG|$8~!M9>2B!H;03LrTxZQAGO0W^nsY07%MT~n>o64?|mF=Vb`X1u#y6ZOf>|Gov+ zsvvstf;<2S!MM$21@;)ssKodH%4XpT5mdi%4DDpWCby%gfNx+=D!F0xDs1WT(jzbM zscMZU3{o&lQkVxr)vi$srbEoO76!hM#NAx<6fi-xx}^kl0Q^`T79tvdN4c)~TKH=1 zJPEV#(!#1eYJM1jGcs-_cg-YfUW&$%3(h$qxh!wxJx!K*#D}s78$=hQgT2>{r>q+A z*Z*=sm7J6v$;+i119M1Ze4)Gg#-FFdCV>2FCg;$;TDFRQVBoAc)xE4>hO6*Wj`cjq ztbJmKK0P6O0Psr?&fM@kZYeCYm8-jM1hAD_OwZq3pZ)xp4{2CvJKO^2 zoBUgR{)v^pK?i%FU4Pl%Io_Y1u5CYFKij_lSf$#1u=KK~&9W%C&!n&-@3pUm$cWQR z-L@37MtOuoM>v$^*y{76ikn4BBo8|8rcHwC`#5->Yf)l8U{8O~=JHqAgfsPXm_IY1 zzPgQ)0G_*)OF>MFh@GPESK<77;O;)2JTgd%u7facC47`{8x!|iy1TgFj@`)5kYYa8 zuT9(?(&eX*wi-Igr(Gf2V{`acSAX+tac^w;T6MiDV;-cAca7j-qGT}29ePA(im$I@ ztBky8bhKEw0OPGT6TB&oV3>n5r+V=Db~TxL0F+YGeA-x7l>eO9@bP!+e%J^dR`s4@ zw=%b-kTnE{q#B|XF^PqP2x5iQ4w2=%+GCqw?dk;`?9H>JhI_Zou;`ydZaBgzOOQON}YXT zldZK3@7|nou+=d#9}D+dkj-1aPN~-)OqkzfFte(2AKK)HctkoosKnbg=58V%Y8`QL zX5j8;l3Em}mw;tbN^^6|CKWHAb>{YQ03>X?tfc?Wq*#Hh`|_yBd!7&9-Opr5jJact zQM@!}DECgapn?j#FMo11Mf_%9Iu`Spo`X0&5_}Z>4-E+Ru$In* zF73_PoC#s#{m}cHhuJGK#Sm>=5hYX@W~4@f`5zoO(=jbfH~TiSmweQWE+a#Sx^k@$ zspUVsd1+TO*|BGI?NoE$H@5J;U4ZWGZDv0{;`S{0vM)>gqbw^waxDJ!CM?^Y=NBWj z(#BbXA-{G$hf?W1qOft0Xq(=q6S! z`vOW&RpaA|?PI2K>)UxQU@BfkyBZq54E&uf-HXOT9_@Q`?d-l1PV&>>XTZCN$(3#d1=^9Mc5#Akym1ENdJ%Ihvy-n zSS#v-@Uke5tI#>>#>e}22Iz36LC7

&9iU;^gTD8(c=%9;Awto9<$RRm&G~9b%{I`ac?^wA z0^?2B;ooY8Erw!t^M53J=T?Mssh-YKCY7$8ELqK&{sv*K2=2t%lDgxYsRmA~#q2N% z($|`nn~vCjgQP2d>O^d}od|Mr>pBvcJ0|EvAoU)5@pKfoV7 zDrvJomHER_nlhzHrt#7ZyAG`5w|Es@W|US>{Zdwc=_c{9xzK8v*QIUkW>-MeI(~(^ zZ{o5Xkp9C`T9GxW-k|!@jjC(2tyMnn7G+_1yTqB)Z7wR4(eqGx=Od!EzR4z3bcuIY zHl2R$KQZe2;BK(#5iYX3Kb~6 zbWeFKP1k3Y=ABJ1!OHm=ad@`2{%a$M=6@~A^yV^1tuITwi|=sK?=0*yBMBNRwW^cIChuf@cgdI=StPGzi;A^i5@Y2PHaGXn zB4>(fXk``)(Lo-$-5zX^d$A52~`z38i|u(xY=z>kj)EAOiIv>y!$6ZJ}o=Mc?rYM zB z4*IcSt%GD3i>tVm-JGIO%awZL-LSZ}}9ybF#zp`O&KPTH)YhDBCJ%xXZ>xMoEr ziz*l7QdUK{a;3HEHGYV_>t^nWh>EPt)zmT+CQ*9zm#I;6t*TtY zhjpovsXp3NYah4`YgzH5H zL_A#x`RHxd70NJ)Z0V%L`5qcDHF$43st z5FUsQQT412B1G31(%DLD*&TQd+ZCQb(I{#lO+~LXBB-h-;1PF~J(TD*Ev&_ZP!}mQrpgcG7mqXUR)WhOK7|SaVPX?1hGJ^QHl)?R_MG-`R=T%Q0$>n`O(4AR= z#xY>Cp=+#aSF>(*MB9T~-h6C#)!pe$+hd)+goq^K@qDR_>yUd>4*_K~eTJW#nUtqn zQ}K`CgyVkpvcR^kXG(Dn{#-H4A|HX590)~7Mfj`u?RTkIJPk>LM^t%Fo~@YrYti^b zpo>C-qnuC7cP%v$KC`Z0#!1a$zpZH3RdnnwjzoA8861e#Tc-@42mC4=sP=R21n)DG z^vzAnEwyYf%k){V%_q&r?VkL0?UwEq&#xzBY|Tsy)4O}>w`@7Q@*1$xcGn#e0s*-> zj~`^*Lc-MhN>}{x!GSMb&Jj59a4j}*>~c8DM!JX_yUuSq+-yY|{m-KOv=fPcB@JZj z1ue#cLDs3v(Usx2cp#^Z^@EIhKdO6iD$HDHX)>kYtc5LEj#uLDU05PSrq1Td$a(Xp zRIhXKaef6+3>C%9f0J9sxtOHE)C8iNIJE+uLQB@WEp-gmts;A2oykF1)4c|MkJ6vc zYGaaU$(O`d)^*@v4pCxd96X=5=I_Xg1-W~DN#td`)W3xN6=|(1lQT1@mG*iiQ*jd1 zKy{s^d!?w{^UdPct2GWAmwe=g7@4Doljbry6AG5%%+*HvGkibux{)J6-2f$f3jFm+ z={Y?5&L|7;_+6a*4ZPQmTmjV>G2QzC!kR1R2xQfbcLkqGWDOO`>8n!H@99%7xpj00M2{qg*R34VU2M7>=FlO+_QK3lih$W+oD?oXn2buF zD3P<^t`z8DbWXt5E_l{@)xoBru!0!mY6=PVjz{drUFQMA@+*@xpszjdols@`!)$wU zw|!e6(q(-5&|$Twnmdxr(sy$sbiHfug=<7$Rdp32opO92ylwR1>L%s1yr;(Dl?!>! z&Q(><2XuPSd+a_Fo1PIy?$r->H z@@nYlXuDV8bx8kMez{9?kJ_c)|DE`H#v1keD*QR1U*-#I`t8dS&rF{6PP`LPJ^0JS zcvHekxc7Z*nAg_wBxRfNUrY*;k6l9to5TZdmbE7Vxeb@BYqm?r#>a_Ni_&(U;)gip zRVQ58LxII;S1jb1A%?t6S`|t|QkgCXlNCD%*Ck(IW>xsssT#Ef4cAUC zHeLyC{vUjh>a}DRV0IA)ZGvp*qOV zPHHmGkz@l#Tz!29f7=M?4}D@nztbV+Uo~+gBQp@vhWaLWYjjN);0c}O>Bx(ndA(*x zoeW8fS-No_N=6tO2ZlXW9ITz3VEwk6x(XBoHMmp#_lc(1d=(L1hj(bfCs*39Nbf#s zzF}V*Ev)h{Vg8Ys6itiO)*mn0GIwjZXgx*s`9S4!Nfq|Hlc^#={|4{g)Z|s=BowMl z#xwZ~%C8bX%zh4^)E6{>jC65xlkiv3pcxiSR+2fE9*PQ(!e67})-unCyf#K3;t?Io zh`h89N!dsmST=YF(a)<=(vbW$gbx-h<-%hHcN_cL@{SRCNTQN;vH=l?ttrT3-0Sqr zd}v#cW3xF7MI30!Yzd1ElJIZN68?}^%(dbD+rtazj4MHg3ypTh75w|i80@T$romIo zit4&lSl2&x(e*reogGxO0$%F;2a?p79lodwR8hbjXSgyY(F#)j!}Uf%2Plz@xPL9P zxSH%ltq=EAf9yy_V}Ae>lBhxed66=?;1vGQJLkg%Q#}BYTE-I1ia9iS??hqAEfF>B zU{AK?{O_nJ;KdZhQ{?xy-Ge?6?&o`FTtnk}ziTx4)RlAkhBDarf+EJBmF#^+5&hxV zBC|S`w|Ec-{D3M|uUP7pdT$F3#lI|J;T{_2yO6g#6(;w#Hii&a8{7o0Xde7Bop^>n z;1PY&&0tgIZ%mUl zJm7Bjp%HN!T^EH}cyY4VMe=A-umy?V@$lS_|E9Cays{7UkMwF5duMG^(GWEi(AmKA z!YvrC1_q1@rdrBFC?O)i36Jau!VqwNqY^ZHZ^H)AEZA?NoN;u;5~31)&=_vBc2aI{ zue?>=*Z6b`-r|ui)yMkU+-b!5eK3)(sD=nfk^Jlz&Sc+L46`!%VhK>7WX?)y<^iq5!o(fzx2 z;G70Y!H0d{(u0Q%U|ZnSCYu`+Mhi6iCzlC$w*Z)dBoz$e2I)^v38-(d=+t7~xOE1_&XXMjJHuUz2Jr+ItbYj!t*#Q<6iJ64yZjh?@yxIP(?bZ}Aolh*S z@i}e%)L&07gHoMAM~5$F`e)tK31-ZOF@t>TQ$gD-+L11?Y6a3i=&tahz(wX|Z!%s^ zL0i<5&ZyssMDE~I5&^aU{CX$;BIaO2Pd2U70O&l<;~$v!M0EmzL5}n@D8OJi9&+1c zutJTCpuX4Cuj5%lO$embGdL0A?H|AM=$t|Fvo1{zFF04*kdZ`rkSwZJGLqvq;x`<6 zFW~YlMnIFS{PPK*Lz{)?HmtD3>G!E=aK`&#QB?f}c#sS(LIrq;tq-3>Vg}AQ4XShw zMF^|mSQ>}is^_iRuRC@P-T-OxAMSX2_zx%$z88MILE@D`{aEWr)SbgOG^7@=r(V8Z zQGUOJ#Gub~d-GxS%P{6N&I*Jk(GP-{HA(TtcElr?Y~Vehb&?sLf1#KO!VWk= zgA`K{@w+~i^}Kl2v%*Uf~H5KaGOsS#{oqC#b?!IvGS&H zS+M-+L7jg4t*0zp^<`gjt4x{arynV9R59nrHETjnTr@_TNLKXjhnWL( zypZgB5ZYR;aY6c*v%i8;4}6N7BRq3Sk;Gttmv_M_3D^|54nZO)lmkv z)}>XN!KWU38JMDE57GY9Z&{dK)wfJF2YQRtX`3op1% z#Ru9$jCWi*wCED=p;UPv;b(K0YjDqrQZe8Hk(NC;#TR{qz_|UIEdL*B( zvC?jd(WVeYwy0$NzWn05DcL{0N?xv5&9+>6jOH^AOR&o%2Ded129q_?y?B^nrHUJ3+(kxIgzfFWkvD=8UYzl77U?D&+?z&%&J zVdug;X&88+&DKcUf-fZ+*YlI)@o-9lE4arWMm0EHuZg&bFxBYPI!RHPu{ZzFIuqm= zTqf~*i`jwif~Q9Mi*u@_E2aMHPhxx`5(y2LI8aNcM2oae6K{#xG0PtBAKj=^CTO{r z;doHw8YqeAaHb|HmlKmmn(_95ftF+ZflkXG;+HbR&}E$pR_}zM;lh1($2}g*%#1J5 z!px8|;(*a$MR<#a=ke$>&AZmv53x14_w>Reu+UZoJ2ZtWje|SoQTP%+?h55c+=FaE z2Iy+4QkCC61zOWsvq2A=;dCa-hhE)WzBNN;Q4uveG)sQ4)^t&JqE6F^!pE7-c! z_k9d6h!S_SK^_d_ndvm;pxIffTeBSO0;yCxpF8}gOm#HQ$B1iVQwn~43k*tcVyPtC zrANFB3~7qh^{c07YJ{$z{6t)Qo1)!XbF72r=3pS?bLux>l-!0lK@oQr5KT;D&aC}M zo0tkw6shpSzy29>^N9WgYuEeBLC3z7OSmufJ?cl}{m+cJS(4a!SCgoc8f-$K9cbX> z&VH1CzqDl`gll&+vB6CNeq-}8Jg`X7 ze6mA&h{SqAt-iwl}e|-hpMHj@I85ixN z!?JnUFLK`US?tJiNswL|7@gR}~tKc*7So>PW488sX0n;Um z5T0V4-(}dk8V>{s%eQc2lL~tP>k<1&?_}wZ(B@_~W0zsw9ACSWqR3h>C~TwUB+hg~ zLQ?W(p+oy;Oo76}%CFJ0QQySog$`A9OBJ*$y|Jx|7OD`5OUk#guv5XzB_It1w3r&x z4d)2Ofw_qQWQ|;KaGg3o&CnETl=aNa<0VH{1v2aftnQa)+La`(flX3u4l82G&oIz$ z?#uWHCJGF`ID=qq`A^-yvdH&P&=F-*)|7rh5AA{Qs$`95YT~aOG|b8Ioy7i;H*THy z8`s*v$bn#f-p45Y0smvSf)B8bgwQLqXwI`emrAvkoyebft46_eOL8T7+%Y81h>Lj^ ztjn!_h`UB5zLW0uxFgw_rX2N9%JzeX`40Z*trW%4rH@5f(Ct)`u8V#g%jfdAe6}z9 zLw%mureWohQD3Tety7l7W4pVn6?;sufOjgHNN@q<09UfYFqnia)f(UoG#eqg2jQ&} z?=W7$OZ}nDtfj9ac6hv;z$!@wF-R@EZUAl!Ez97f=*jPGV6o_|=1JZ%?T+8{d`D+} zxRmt`KW@?>|hwoVgX zI;4X+E(9e5nqdHB);Npea<0txa&`f@UG-0C1VlK1qqMG7EdP??=U zDYDF$g_+I?*{SvC5NoG#(^D*!zmx|zQ*g_UF5^#`C-g%&p&}diS0s*LUAhFoY%Y1X zrZ^A9#5n?>&n_|}QbTIM?wAak#u_&J}ImHDl+j*+(ZqVfUMpAAnC0re&1-XW@A(68?Bp zRzE1Qc>FG81y``Zl?&>ic-mN2`gUhrDLtD(>X(w2+WCIBo`96GUF?B*z2$Bp#}#o- zTpHPe(j~tq3Bc)~pZ$}KD`*|37`=LQpze=|FkT{@TB2DU8w;m}IS7LPDeH_%Q9fAxb#K||MUv+M7NX* z3W?^3qO%%O1|KM;9mYu5KRfq+m|k!Zw}-#FYf!5sQUfLcC)=03kK~c(%jwYr>-{`k zA33zfCFKY&_V&zK=k>qNJ`=JD7f;P;7DX2-GI&U^##y3hOv*%vQig9}gCU7o=^9;Y zmY^Q0zw$R|46fJu;n<>-yst5(n8h!&^GpsGv)vjD0x9uT?1JUa%UB{9Z3N~9jP=Ksgqhwm`Z^*&`bX+Z-evd_o|V+?ZOb^1*l`sb z16Kn=o>9b@u)m+JmBFNE_ua#TqrMiwCBLjstkn>Lkf1W|(oh@LPt~ZG`G^@6m3sNA zePI_hNZiA3{Oe+!7D<1ao>I-3+eU|lHd~KsWr4;Je+2HGi^jeO9|1*{GHqiC+N9`g z0tuJuW3qym*@XH%R)O>Iy|{WyHRQ;cRtjrkxv^3d4k7V>)%I#nA5K@H>-ojuhitnL*P z62(#jMYGV9X(IMtY`}@7jy?gYZ&F`Tq*bwG;06^8)iEK}#l%gOOPy4rSED>gkA+u= zWs|HT8(YcMae8(!?=5$#pk>0YdIwCU?!PJgAWXC9cnCpkq)o~sfT%`=hFU|Ye^tflsw za; zDj}{B?IIGnt@3kLyyJv&2Kq;L2@tH7RYsjPaK`M=x#6bSO>I;HGkH9PgG{^{#`$HJA^5>NL>CE6*ZY%#!RE7Y}aUTUM`( zRz21)f|Pg-u}Nd#LE2!qzofduA@i|$Ho|>c@v-gO3yTfvvn-f>f7VpB4H$XR_gMWX z`(w6i$j+?3L4j;g*2U+&QNF>>!@DlP%jN4NN+mkDS^(g8aTO?&Ig2V~=*^Y1~s)<0u9-2q0zlY3vOKEc;UHa~!(GZpU})D|Va=?<$@a z67@L}>{w>5SytOKHEhN`K(_6D`^H&|#h_im6U*t{Wl#-M_zq`#6*_WjXP(T@OBb&# zW!Gfb4&tle$^s=1&)v9H2{!b~1aa$%JMpZ)B)iEj{oeljZM$y?BMBHfJ9)i+@)cXWeYkH z_94yAGjUwa!k?G&K+2&f)v{3fps(DRg%`$%XpO9yhUcz%!;v%y)>VkoRJ8?H>6lG_ z6UJihcNNdV0dIT^e*~YYyh`V!4>p{m5zA)&EXPof%F?Ain z3nf|7j3f(d!ToaeI#**Z5#pF1F2GJSxr5|?TKJ79%@nj;r+pl(x0L$(RMX<+RoPe9G}6>u78>vG$3v} zGXu$fb02_cG-f?66jHh_+D*pho)a4X*)iAam)p%d=z_5-3IT;w#(~N&j&^N9dYG&FFGp&H{Z|yxc>p=_^ zBMZeB8_boj^<^F30rklqOdzSn>a!^I^Sw&4JH$xOetal#on~dIFm%dN^&ux$TivHc z+vT)FTL(yLXkqsv%amCbH7Dhy(SiHHR4t4_8H5nO%Qt=jw~oiTwN;*KuJ6J~qc-dE z0hMg3Z&RVy&!-YNJxW#j{$-l+h?ScY+W_5pV0vF8=Q%j^BynliJahZUMOn)`3!|;l z;MpB|ODaoG#7Fogrsr|PM$>Kff|~juQZ5_ zFiZQb%miN+Xby@rFlx3(x6MxU+h`;p9{i_~AI+g)QnC>FTU>zDm@13RuE zPEv^B4vS;_e4tM9R;cYYnZMLMcx{cg#cMy?C0vSw{91F!qzr1+gA}D?x(HktvwT@g zW-#E518O8*?fuGdO`yrj<~`}p84qp)g`b+^VDM)b#63FP3ZunkO#~+37-X(~@VCpb z2}Qi{649`KW}In*1vl$C-y)wa_FrYykRIIkga=(6k-ggj zcdxS{y~k!ZltM-`ED1&v6ZVKimHz}561`T`X$*f3kH)I^6%t zAT1=O$2sYjz>R8du%E+_lo=~4BbfUqffFcNffaE(qSsFa;L?;fZ$g{WG_iWABsBvn z_)rQnvt$~Mq6SCCi2c467oVl6Ai@5Uzx(5+vOsrDS(Q2l9g-#JNnfDM`!!TbFrPeq zB(x+?xu4sq>ZI%fc)-Sf7VVrLIVq3-NhpgU(adukj-x{5gkKf6A$8)n9B~-vBX=;k zOT&FWyOeOA!#8)~9zV%MB=bk6$m|4~!@18a8Sx#lR#$WV=B=5;f?((V!u%}A)33as z)i9hlei$n54rv}}FSHvqMfYjyZKj)8V%h?JgR+N%(mV$D%?=1Pkdv}amXRkK4U01L z?Yx%HVa@Jr9^)W;Kh_-?2Ckz{($qupk`|shFylyo84pahcphThjW3M!+9?1*f2d#H zxUS9w@uOfU&oNSo)Rt_`WhnWjuih`Niic>BJGQo1?Ed8E$aMX(;jHYV6M9R%kE($*1>Q|H9LE z-49#&S?ykE=fSec?e&e}?%Ia6t$1(U(ARegZ}HGjg#8FsXJ+f`zOC}&Sb0y(&Klr!i)%^ZoME&bZyt}@B$ztUN-W}e| zuXoGNhQQ9&F=C67AFe}hrf|!c<2ZJH)yl@+rrWfT@qAoie%3RA6IYH;awhWHT)BOt zhJX=3ZSL2b>ZAXKs?Xf8!vZXF`VE4NXljGoq=E($EdEof>*Vln# z2dsW@C&``nOVoLyyPpx#Sh&~yG*0En;eKP=U$4zjbZv6#GV@u(iNAA{I6*g?WY z5(6AL!OERdce~y09%�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ℜNdjG_ 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

Ogx@+j|{_-7CUa z7-#@V8soDK@KrO-LOpKq#S66lp>YZa~jENu*KqqWP7(}$Uxc8Twi+ml52ywA==Pw zw7HTaWz6X~$Jfn0td<8KZJvF!zTw*_ZDjnP4QGx6^`fymV5o|RKi1sb?UIDf)zA}j zawYg!)1u@EScuHF{Hc(N{pTFSwTAiF{J`16(W!?ktr0?BNB zUOg-_2G$HzJ$2>EL@eO)(b_wBqLeP~ZfTO3l!?5dDprbjafDPSor{U@kdAsjSkWls ztZp`qh_y%oUCp?q)_lp0`FnJ?P59*vg?~MVGD1o-sU@$4j%pS^uk=SC&=GN?s*5Zb zTBvvg{QbQ?BoN3p4D-flv%6+SmcYx1n&uf5ME~YBMA=}L6%0x_NCzD*@m%8>#@`(w1hFm>T_Th_cP=k_^heEka|vnL0z1P& zYKqP%qHHE-IPqp{TO)w1_p+&3*e*c}C+TJS%t4tc)9n#BQmiCFMCy5n}=sFgYrLyou9n0Y@t1n4oR#QYsUbs&5IhKQxb!FhBW~h zD7fZrl5nyP%?T2lAQo+-h*kc-B%Mz%EoR}MAZJoK#k{~ZN$5cY1Z)F9g$kyva6oOl zK%nY3f`UEbnz}T-yxaY?N+U-2TVu>tePKq_yJI1Po6yC zL_tqyaI?Cti(`hFmwDoR?zMz7vn|j9_5|n@Wz{P)Q7`j;1%jQBNcOn;AE7lQ-hStA zjsyjZ`|xD0`Gdr&^`8A=BZ^DNY(zQCwHZ1Xz6=;_S34`MR?q6x*XrgP8{wdpws0#* zrPkcf=6-+VQCx&S@gSatK1u+3p9HS9Vi=^$~F?hN9t{{lOcxNQ41 zl0=q#Uk3sp7CE494R#?^*m%lPTszjsE;CIH8sf6Q%NIA5094U03CKwXoW=u|t4ho~cLi5`PpITeOBu&`0u{2B`_$I1n9^{8a-v3y0OWYsB)>3d7Pg45J}(A3e-qF4 z+D6hB@Oj{C3`Rq_(j|veEN?+GiAUn_qxJ^~%6CK;-cd2{%Y%gp&^Icf$uzN(kBK@ zXof8B+Hvnj8RPU4ao!Y3ellSHB-u#+*^+s>Oc2my)?nbDi!E!gE*m%m!CEujhlf!Q zVPiO_gNG^YvC2^*3ta?m&SpH$W%@68JbJ^OTOLq22?{I@#C?W#ni!?gKpV-CWB;G- z>z=>yZ;#Xcf0ZPdAPv>Y49ceIQ|+3giMbiAc{`XpdF6efik=VZe!kaV9%6EWsy>Y5 z-iS{DB|7>yjIL5l1oPujw{0#9rRp6--pKH(RPh3e;083uLiB)HPuthM`C409b^;;D zFA#*`A!t~2nTElqddQs2h>FK_|HVw~09G4#b^Tq|aj_oXmGAa1?|K7Jt4lHLWBKjr z@Mr^dA)z7g1hs=u&CTt^`I_zf_Uwt^4th!=fT52y?OpK9y|LjW2yPvq{d;+UAxO|( z#>o1hRp-NcO8vr!%RL#BLta?0hBwvHpBkvsbK`>myRjy^4DKag^Ay7&Y;u(u0K)?w z$&x=ekW)QS*7F)<9-Lvd2Z*vJm1Pz(Zl7q+Wff7s>FHnhvWN)yw*o~Ayq zK>a)d4S`lF8@^-vF}8n4?x)gYAQ*W$z1Q8_+TJ)n31^2I9pzsm=tt%U05^F|^=XV= zmCs2hJjewd3qi*T5;fHGq;_=L0X{Jtc6q3nbtsG+jG&>Wl?{sAv2-bIBeqvevO`NR zqqwFcjKwY;WXN9K3u;3MY_rDB8PZLJF8SDWkC8KSg_!~G^m4u{fWzz$Zy|3L-_F=d zRJCk%yLC=yy_Ra-^r#^dN;2ac2I#UMi4<_kzJ_}&iMC;kuO*UY%$mmo*v&`E?62Dj z(&Xad{rzg_?J1QTHkrE^cz^6ra5X!bx6u?+larG%F+4vX%Juv8>v{zyc(O}}%O}Gp z`{H_#Jr(FOF$5wuJ(=5+5@EZO+xPkGX1HJ7h+yeedI1b}G=MHNHQZg}E6fhS;psx4 zcZJ{iw!3L~2+9X3>!<7lu>VWocz%J0vn_-ot8feaT_>v$i=dtbm0luAMQ2LIK5;G~ zDHcylYXlob(~LrMkOwVtm%9cAWT^wA!zvOre?asojv@*4|Hz=Jzjj$z09vDt>k=rP)9MT}EzpV;KC`km*0}SG zSCePAh6loGswqKi7~sI1MfNA#rx&zI zg~ROglDyRYKDu(`i(akNQ{BJtk+)M5Gq+DlIliZti3FnuJqXj{gpWdmevyl2#SEK% z0=U(l3;$(^Zwk3cEAl92Nh>;;4Lhcvbjn49po$*fD-b{X|4SIwq z29pnB{)Mr# zb9UTFOES3tHCIv7T|tKI+qFgH4H-lVvL9+6DVBwTCVHE&VPO-go;88$z{sI41Mng4 zK~+?MQh5+iwZuCYfKv-Q_jC%SqREHAmM}ewQIS95(b6_z2)6Nlyzs@@;xVc{kqbQc8VVXT zNsyXEfhkrB@w##nJ7-Co&{T`(1pIB%5V5=L-`00(xj!E@xY_@Fv9)IoWa$Hz$)JJ` zr04i+!JQF{Beq4$S9NuLRnqY0snpRpKiz_aMIt;JD_eND`ep)h7<{-;T}F}Rrt@Op zR5LLg`WAZ!^EX4qz|K(zPP^`RLXmG7yVF23QxI?V#YB-S-l!U0F+~|33P80Z5w6i` zVFu1#Wc`6NwTzuPC;ehE8=q)vQvF;3?~UQ00@ZQ-3b`5lH-Xtvu&Wfsbo!$jqohxk zrD0;Eo+zqPRA=5aMn6LBq`$6Uv%k}FfQc?k_`|QN`T(7v`T^=iyrG_^yD97QqNslu znThYWu<72Cgp2-uf3&kIR{%gH4f|_Mj_@H)z*>-k*&9b9KD>Sr8QLtLKvi>2^vvjGJo}e(Ux29m3Ww%aGJH+>RD47XtJ-lsT3^$vAXg{O?a$_lmDEi8aS^TI z#`;zN1iCm;2y?+83$TJPmH^K@>g#X);_bJL=COEDC?ZI!lcM?r8ZZimj3ej-iuzcc zYfS2YW>VbrUvoMw{Zr~8?#Z~iSvOPFbWbiW(pPD#Jwi)8gn*T}qQngefk}z7(J6Bg zQ!h)+dm!~gOvw2g@}V~g?4ebNNE^kJp%R*+XOQ&JN{gxDoZ-gBU)hN)qd5Jt8-|~V z1+y-NvsIQGD@nhTuijL-j1R1{RT8vtCJkjYjR{79mc+&D`w5`xl~+RBZk@0!oPzynGKa8$9FREd(uMCPbT3@bpA)C5iSZ5_?Ppw449v#tkC;1`aFLeGjhc~=O}oe^Uros(o&W2Zdf;1AX`yP1Kt(89n6yF##Oq|B7FaTy z3C5y*so+j@#!5mf7x1Le2&J)n2{H)59hv64p&|bj9?w0&6iVX)hQw69qX0bwYAj_v z?Q>jUg9o@OJxxJU9uqK=3!RfRVzSqH!~@WQrz%r>m!#q#n32 z;t+2P&3-+$cI?{SCO9Ean>{ym$H;N@%<9x1PynzVgxbJt{Edq$Fbvg`h|V8XIxUXn zTAyliO^1?dz?M;Rp(+1USDv#*ghE&^Q6>0Zlny`^vxX+5m>3JQ;9|>N$G5fGbU+|&~nHCL&mkT z6Cp6=nS(oQpH%SGEt-DbhYF&%+n#SVEe0O>#qkRX9xOd^YAtXq0+u#wPA6^QRlzQ& zPyA{~d+1WRFk_tG^=0@jgxhxM%_(%Tlat+bclWgG)sTm%!9j_|t2gB5d)Y#SU*Mv72x>v z^bq9a0q@7t*Abte=m`sZYM!Ay3?Skyq?uGIsVXo# z(sDR~Tgn?-`|4^nr5lq-3gr*V4p5$n3;8u;4O2}+uE}x*h=3oMXk|A{Z9*9Hr2<;8 zmTJ?PeyCO`;FsOnZB3IQVR#v}oNtLgHb8;QTAuGiyW5NP zckY<`<*0$rWM&CQJizn)y6K*P_ipj|oA7X)fahEOvAbz|X*onOZHz&+`z7+GRNn+} z0dDv$(21JJ@kSF`E^+A2bf+Y_?=JbqbQjnl@CNxXo7i+&bs37I9n0R_ytrSnZ?_!X zt@zvJRJet$*_Ex??HAr#ZLe@FeSk>W_w%nKf~f)xA8$NqEI`GrSl7#FJ5ARThWP2I zv$eGsJ#s#KO4rSl5?17cP{wt1rwL~99)?z~{@b2iZ!z3pIj*RBUt}>GxH!7@3){4Wg>af$LLpN_#oorRX4bkMB3(0 z+M91sELwSt=0wW1@DF)I_4NC|Cdr__Gj{nkAn9p$3MhiW(GHC6-RdiX(2mla?Rj+< zEIXkrIVC;gh+Wu~&bg5+10Uu@2||j9FgHsNOOqdOGddNJRhWT$kc(kaOD4O3jG&&U z=+eW`J2~cldNU7-`vFu!adHt8q1_{adh9lFWDY$5$Ft@Xg%g=^B%umd&`)=qQpmnQ zn$3Xi04zX>f)|hHHPlkbK$qU1Cx5`N`VV2t#IhEyVToP?BzJ%Nd|9jIA$LJ#FO08= zWXVSpCnx{@{rhE}o-=d?E2;lGb`q8|;}1mF0~_kM^f%G(*sp{UXJf9_mkU7K^765X zJ9g&1<2>Dk%^!ZfEGN_t)pmOmOnyZr2}XbR2*A{GFp)68{oB`-XK(~|x^$}zjo5=y z+zL8MW?bQNp1X-@^~oD$mZTGTDMd*qa#wmWEY#lU9I3G`L_+vEm&uX{p#1LL=3(QxTzaIkG zIDk126w(mr#)Tufh5g{DeF`<6tf6I?`^1Gv){@!(@hP{)S94P`i}VY=7)q2|s~J^! zZ7NbY;?H1VWaeSt))j9CCm83!Q9gxPWXb29IoW9EGa+Qbvi9QTbNOzkbxt;@&+Pol>+TE?03Umg5F4?5yL>jrA9O?^B_RY2w>K81EPyjJ zCFED;AKof!*-)sh^L>fj8u=|tRf zWXR>1kP}8szvq@3##I2w$3$W#htJn8;{lQYL*n?=3k%?cz4bw5oE0 zh`b~vz>*=Qrhm5S(HqTxf=Me~36%kKr5PIR_GfDwU~!4;YEw3nKnQrA_iEy_6Vvnj zHE0Y(g-zLfd0O8nL|<_4R1X2PyQL7iNN;);Y)K@S)R#aqr;c6hnd=QrmiQ6MEKf;$ z=EMEZ#u~fQH@?aBCAkB3Eiz+h{!pyB>dh*J8ULcqh=;!TFf&GMWRG>x@XnI&9&Ni& z`Ok?s1%y|sXFvUL9XlXM{0|746LClv#{2c0hUfkOCdp5Ekr*_Cr!vLv{+TQ40TA9g z7}raM2Wk;T`92UP@4+Sx7ArkeZn3B-rLVflJ|X)?uK2Q?{K*NA=aQDEEHTpX#Z8Pht9fJlKp#Kc+O34Su@vlK{m~8 zZH>*P@Q|(ci7p1L?rgWW1?qE=;g@K}A`T@|$Vp$lyIG?B<-99Zg>8)}U}j!B5~Pxq&utSR9B$0~WO4Z28XoAH01KUWk`L?C;|doBRjxn}6kPW+!{L z%vV?<7d(uf&Xyv_EN1p`?M>Hii67cW@U*UW004tXh&X_^$Q0|+=Rsvgk}8qVue5W) z=wdRok>^n(#KUBQrTonK_&#ul3N(sbA@`)vx&+#YJ}tQXBfdiVeSZrL$ z1F8{iMc;tVJxYEp^^6LC;rv!PFMA;0J>Vq5m}%w5sWP0<^nqSd-Fs?f{&q`pHll2( z84azWGEciCC%KAeLDpRoeX@Rz87Tc>1@EqMH<`9$9K2tPH?o#TK-(Omc^SuUfdY?P zWn|vUBK0pGdDN2JkQejt7Ykm^92bQceh_=ii1UEs!;$R6ERVBIZP_&O@b6z5rCW?g zIWCp);nEzfD2qnhEtHr(jCjPXpa-P##ZJx7Y zFTMc+(sXi#yS@B2pTiJ4U#UBx5`14*%&Lv4&v%g#V=+!BbNi$4sH=YPj@{G`6EQ|& z(ZLD#P(ZItw6FQ&6#k}1#C%iq&(A-^g}a&bZ*RVyugAyYsQsQ}^SR5LI;OzzaSDRx z7+g8!)$z?OY`jx=LcgaT>gKs`Q33-^beUNt&1hP`y0DmV`R{+|jAGO`jQPcCYghRMD@Pu}w4GI87 z?#dWO(_IhyXp!-he2HB`4CC=a2?KyK`W_vXbazb1sSJmV$lQ)1scV8mO=LPQPHIKN z0Z&IMOg3|Jtaq)_!=cx=ed&6+9VXvr^bwQakw*~T`In0QEhE1BIGAZk)!dx(#|C=r z42A-pE+JgbT(w)?bc0`0SOZ1;;sby_?u-puu~Yrq>RvTZ7Z3M7*ABiT6zb;67j|dU z39;iS!xQT)rIJM&ZR_2PqQk9S!TmZms?V#N{AaD)_eJLi5d5HNp6@pT^*sUkH;Mw??fm|$cg~IK`hv_w*z#1RK7Pi|XBVd}>hSL%X z-W%H05H16TSo}-Jdt~*FD(8`c+#|}JEGe8F$DHH z;bH2IgegPP>>M$%Lk9so0ARRhlN&qGqiM&fbIXX&a@+8g78|pw$sbKrY#A(7OazS_ zq`W5cwdxyHULgiM3#}^9L5VN>`sXe!v;ZE$0$1bvMX^8b4Zr$OSK?Dw!be&!Vo5k5 zz2NL9%*0eVI&g+s3guKOsuUTCZVXMR=aN+(L^UARTzpIP#v!#J0)QpVUz5`8g)t1* zV>dXrD|RAm6pf`l4dByXZZV+j%Gs(e1{GOnZ**R0yN<*!3@=iFr79>nSIMCsB~74! z>9)?Z;|^bgstRN3vCZ@zB4 z6C40(iL6Id)Arb(2=TY_oJLF}Mfk(8m>A^-&nPUAMG2YxDFleQtc}d2P%_$W-Kho)aD7)s4W^pzk@1IrzLo2RwMl>}VDG5sm~7HnTdS zu>uY1FfQUS`Bk*Wd+L|z4m5c^04==A&4A9{#ZM^nxi95}pog&Jbu?cT11Z_&qx$(} zxc{|bRkn$#uWX!U+kgHGTQ2>WirBBpfE`YlJUA}>nM;ju_+vk(zdEmYO}|&Q@+gY4 zOK{;LKsI#|0K|WA?GW4`JA4r=tUe29ksvbbV)r7pU}N_}I+Dz{N0#yjP=3gsaTq?i zjlcHs90&&iFE4f8HjkGwm(~2EzzJKE<*4lL2NM>7Kkn5zgs24Jr=#o5N@1`!;&D^l z9v!h&(giK9^qq`$nv~Zhkk8+tf(B5*PZKV}5ootQ0y5;Z!ps-pl72DhB9QOA(QaeBL3$`sj7efcF z4W+fs$QB$cf6Vl1VOpdHr6i#*W6l`5;_%(@go16|oYAc6U;<%mc_55A{%Cg;lyNV)PLN@5nrqkpq7+l_D z==7$aB#)3hTUSIyR0^pAo6fvxrd*5xF#o6(h<$?6AnZU+>3e^GtXTwra*n@Fq+n@k zK3~C|+k$)?x45;aGHc*)=9>3XB-cH};&`oDLs=6)qmG`5c%sk{9~_W;D$+*X7-?D* zt}QLHu8!=0TMqciMpF5tXTt_oUEe?V2kTCFFP`Bb;t_C1uuy5#rL7%*3ry|;1dsTx zalYR`PG4E2d#IrfO7ek&nEco=F^i-RQSF$3I9IHpdeCG-0z1uQ__{#WNBYMgKv~>s zuUVaI=NUVi5T4oz%v*j&@9j*VO_I}5+HCDp`mvCGm{6EV>D)Z>X^zO9m;`DHH*ezxvaY(d4>b=_l;8)vOXXrVS{%sf&HF!@0&k zCMNM1{tOyUokd6IAKeTvaW8x(ce%h=VZ7%5f`mXYb4%6=ZyUT+qHaHF9F9V9%+PAv zobh_$!`*&Gyas%Px_$Mle)U_r9}7Ak2v!OnP_Nq`OLyFpeo1TI z>)W=+v0{BIxR2tO$+;#={~*RPN$7m#-crqT5~dFE4Ycl^EXkkB+UF&j@?}{eiE3FJ zNKw<~z;q(xUNP{0jd)f+uH!U{`axPsQLi5iPEpUcF^$ZdRT@S8=vMjZCu{%jfBsjz ze*Na%ci(+yQgrkVlg9eeoUj%4Zaq=? z`Dj)7&?Woydgr%ia~esv3dxeaFI1DN!g8mc*r_K=R{OSpDJrhWyzLsxl6l_gE^c)f zr(*3PSFF9e4pZ;zomA^eswH~8^+)vru6>i6{dk^~suQ4dT;@!E-l|&asQh$xyI#N8 zoyaA=__U=GkZX|mgfH3a=jlXxVt4NL($n!>y9;C7sq|dcHbnnOBRr4dv6rUG%=MQ8`Z{I{hq%si4@`OzPw@ zz^#kH`=u!3*27}k?;cXUr78;mB&zt&+&$#2c3UTZ^_;2=A;YSCa%|d&_!Q_%Drm=Bg zUJJ^9MlQP4yNtetuk@p{H~LN3o6QCZn#97|s$1^oZ!&5tzwIjsNu;K7eKs+KRI7`? zoJL^WE~3zwfxTS>=psT7iNT!-y@HQ|P@dD$|AL)Q#|RY26>!M!B_KhA@H3hJ?_!x&#n{61NG`SPVua)(4vE_^!d zb#0b3mdSKf$isXUGkdsagWF(7>x{V#U7d8R24aVun%GXlc@fk`f_9sswr)2_4Zij7 z$P36P4#UQ8g5yZD>Nap3=wO22INrM?n;x---VmK(;}FTgrY6=%zGy`NfC+R*=>*7s znGIDO0r?}o<_bjj^MID`59cE+0^~aoR^~t+g`;cZOljg56~DL$1LN`4bW-+^ia z823C4qVc_teUHp&m2JRAbkfz#ex8{5A(1{9X+!zAbGDl7$my17$6a| z1Gbb{CSqKOmmMsB*HXOfc9EL9+j44u?rt}QQg$IQtcaI%nW5lLyzC-K`HjTOE}*B* ziI>!g#juOqR`JElE*~$Ki5L3Up?KNF5V43q%l9@ zyrU|LivvS}X5~Vd{by)F%$AFn{gL9wY9m>BvaLKpg&Cv%yP+3`D+2TCBWQUds_j@X zD7J_j0k%+kvq-0CJ2VW6KC6Y3jX7MNuZ*x<=^Lm~_BOU3FAmglf*}wC2C)O2VmJ+o z!Ux0+-2`p{3;~q2$;wkEsh3iJNxy*Rnkkl{yiy-Pbppzc3vh$IyA=As){%LcD5}mZ!@^QqRkx{D5QD`GDWULxnKx0!nM_K) zmz#H?o&eAbYBUe=*_3fBqe}LxURF3Q2!S*ru#O=u3sso3T@)m4O1+9AdwN{`E?XD9 zF!`@ngKmv|gW2!2An&bK!YasAk2;GlT@g=OPe9AoJs9uwh5|ZcF){xsaliQmB3GHQ zOI^hv%~fozoOJUM#LpOi?kyawymIL%@@P~KqNQac4~Sr**EHxWz2Z$Aohu=aFcesa z@aiHMNzpUX4aq%4qLs?~o9}HVTl%5=s`i|U^7a+1tXhhCk}w#XL7CDr6m7FY)YKUv znT&!|7Xv*xNgk|n71z^+Ma$DGjjxfQAPnyESKcRKIE`ajRF}MhZmwZS7H&0J;Suh z;>@kC7_7^f(dANJRt;G!44A8nHSc4@77PfELKf^~?Ts>B5-DVuDBD4#7hWo^qiLK) z=p=NDs^Dxfi0_1d)Hm^fKQUYwlwWG>EG=2QQ4(Tn>&e!ZPBYVYo{=;KqO)r}EF1(E z5&SzVW=IuVt{{<8t0q!E5C+n@XdjNE1PeOqqWB;)vWfqE9!k2bV?pb;q3rA?_lw4) z`E%Vcx@^vt-?H8BvNIcat?8(Y#T*Gs%EWb4*`l79xuQFN9Tm5j-S-0A&~l~?ei`ZN zw$<&mq;<2lZm%VERk%P`7AO~evneU?t*$AT!+iO|GV`GU)iGN3l-=qp%crI*WOOE~ zHE{n(_m+lBWH=p*zn26DQX~PhtA6;e!*%iE=-u(UIDUQbdR-hGK0SDG^h$kt`1iwC z>f@JB-~PORF5bT~|2;T-ad>=4KmYvd^*>&%i|0qL4)`}>Kobu@Pjad#Il0S(?r)(G zXI&G~I9z7ES1n-{DawG{mjX@MvH*a}A*%YD0RFiv(=clon^h%p(m2N!?=lKzt$8OOwm#m2 zZfS6Tmv{XIV41LfrV9g$gI$XLCZyVnZtp}JEQ7MrrtXnV)&<|?#J=(V^6 zEmp4W%h0+(ftlI`!ob1?yfE#I0qn3C*nFFS6}<;6u}0oJmRQRjf2#$X_5E(+y{@B^ z9FD6&sfI>7G$*aR$SE0gQhK8Na$uG*>r%{9;KU>XYFCtBlz#xff8+#ZDj2_d=iG8G~r<=&W+Z{Hp>dhIczFSW(#xRJ#C6Pt>o&g96h`(^zyt zz}gdb>*yXOW&=R`2E z>1TvZ9iS+DZtcOeyb^UM7g`c~SOpG}9e(l$+{Zx^F+p?y0didS?QoR9Mc*P=sO$T7 zs7fTrnaK)x@AvIc)`7jSZ-=3d?s4|*pwo%fvTp~NnblHa$*PRgzrf_&z8l?tlwea+ zQMORxlue_Ie!LQZZuCv-k$-|EZ!MT04?Ni zS_@bHp8?oL-txo(P2_Dy#IX<=4Z}cWq_(jS$zf8j1S3d)8dLTfQYC~e zRN@IRvgOq|>4eT=IR{{-Q~9MMt#xIm`W#sW_Q#c2b&6ac&f?Vr^H*5?g#nQLR5^z* z_=1genJafhn7q9=7D*Jx*X!bRnu;UgN1^#V6<m1Tm^&i!yL^K%F-IBuZp=~K2LGJiYevowFowy;_NOCY8Q zrd112mv3!{!leax9)txFYp>DDRj5n3#$h-UM-)a4FalU1GJk0wW;G;N7D+h$B>0!? z-J`&{x$g`yuk!$`E6K!Ml2%0UtU{3dO4Gq06-oOlLny&bCZUW*;8r6ki==hcULc z6MS`$dxmVRJ*qFm*TWLN7N^<{WV_Cy7=XEF$VgVrjKk?@1T1JLy^IHKH!~gpDPUM_ zQ>d$ZUS5xX;>QUEXBF${ez{Wcblucm5>a{~BagZVd^E8mTfsbBWY&PBu zBUD3w6EgJQC@|p<%#1@{I&uOG%>yd_^LeR90u@mo--jX3eJ#qDC zc`yWjmeX8&f2~TJg;t$8PfRH8%JP4|P^sC7`A+ItL7TJdxjLn}_H%=X>(S>%A zkY1f93=nUKs|%^yPtKT=96XA7CBGa$5_yfV4&N6uiKA2wQ|aeEBAPp<7BHi$`OoJ& zVGtI=dR*wPEm4@H@pPDyLn|^pBeE08rvm9_0klZqyGSy?DLShIU;~CJXB>JFjf-4= z%B-vGxlG^0(L~1Sb?;=2+?jp)R)edX8sac-37r`OA{l8~!zIdkL<(I>`(Emq*bt*m zd`&R|F{cU{IR@D>0!>1}NcMbE~2(4_cL?L9p!S1Hr5O zNigG8`OoJ=6Cw|hpi+tf^86%!D=lG!P|0z`rvYjcn@7+bqn=YF2o#WYKx}6w>xxE; zL5Odb$QI042O-bnFzeIo*4AER}y;sB@LJ(#{VoHET_5bW@SR~nhOY4yR zsz<8;tbj%J|Emkyl3qqr|H4aN$*<`P^>ECfx9ka!>4WsdqUvNuT3FD31uT$dN$czg z^*!IGqtny<(=;(O3gU3GXcNGfbrwwk^3{j+GO*--p_kPLmS7s1MF)UdM}vm6z@!eJ z5q+4S0qg((umJ{?c_?9a2!IF^9%k~N&xb$$;xS_}`OoJ=6rwL8p_FBPQ6sZ%aUX@3 zGNwXWa%`Lygp66U_JmJ=7j*BLxl}Y!$2oPeBG!b3!x}A8cE768@`psi(D~XdP#V9a z&5D`eD@keui@}=st%@nxsX=e7?-F zsDhshZ78M=EQDX`)U$XR4$v*fm9`?5ap6Q1zbQ_|xaIK^G2)`MBnEkp-aUzF}|IK<|s|#=$w3? zv|rPJKYBOrMxb*@`TWGw@Qs-#c7QO2uykqx9l*UlSThI@mRzRsZx2=|Yh)&D77msU zbvDdCxwUzJ{5qliMKttAGzw+4^O><_q{I_oWqy;}uf)7{l&)W>__|=gbKPsFLGFCZ zN}X+Leg_I2Dg62#=qgArL|!GeeeJD%&8?!~&m70{tNOj4m`UF#fc7`G>pG{jtg3W# zX^gaPGZ}?Bip);?WBfJjCczbH!$!z; zmIHl}-0IUm^!lKKAuPW7n=a(tEC%@WJzbqL<=0qK|ucJzk&`z>S7+ z{mfeiJRo`hudgp<90&f5=ed3`KI|366Eydp%an}zBlVqC4w`xbuq)8)#!d&707>tB z6a)CgovKy;d_FGWd;%oMSNTNyp>^au!X;pT%6!2kA9RUy4L((drE=*XE5CfFG^c4& z{91opmZiGDdhhi5i7C6Tz>8GK<2?Po3~=W0_f~UgjoYRRBx9!CHyEI?5Ao5%CO$+H zgL3CU{QWo(UAxzK;)$O)*1CI*DQT+iHGMT2nCy5Ha}O)-OkEk!lX>E(;%&=9&}?0Q zZBCO+oZJLMt~TJ#*I1%ecCqlcAsNMhzm2cxF7vk)-8_&sQthf~fL9S~1@TQiV!$mg z#4>;_-n~bxWgG&$kB~%z<4TU&R9cpHP ze{n{1A^4ms09gIdcD%f|zKUq3yx!!0;w?2BbKvyFQazkFeX-;X?Gu@C>Jqna@dd>3 zi{)~(?2UHZ&!v7#++7&E@M2neqv5L-N8V_#4rt+LJVd3AB?%S2K`R5}jLSVS_1B{tMyi}MS`6R}vV9M-Jc?P=y&;}9!%2}o5x-9@> zBk}+B%(SvQcm4QXM2FqZ!2X+fX&R#31V_P^xaqwf9pk5O4Nk!29l%g6gA>+VPrNmL zi$MKmCglq?b56yCSq!*;Qd@9sSG*;_#gSDIZLiF2|3Pk^e|{vl2l+leh>yD3rr6vx zr&2H1?6&lud|Lmck^EJJ({5@TOAin4FD%_fk2ya@n|Tw~_9fWjLaW1NmN|1)HeB=i z$-)IM=GVO9Jq1?1W$O~SEURDjB{mnZ_P|xz0?L;BEDcJISl_gN&B5%v@x$MC;3jU> z9f9=?9RK+|;BuOpu+!9?s~bYxxpcwg1hoO9{?j=2uCbm1f1tz!TNmvLPr2^>lL6~$ zZ@GgshDvaM(S`^p5#R12WA=jSGLY!5jY%4n8muRXqYkhOvWVv5>}cC>Nb9WM%{Cn= zX6kauofNc#Jkn5qPc(PY@JO{3fOi1xzVm2!rsK7X#0Q9@pwQx{3&G9#EeF)^4yk5` zM8(6tidk1V0PRt)YA#<&T)Pw+kuu$`y{+|wxbsESKmRtDQ86yKL?pq#bf|cW9uTO4 z3UEO9n3Ek4^5@Vju>*odfR!yvaw!yNv~MT@P6Qu^_$PvY=`rO$zne5Fz>`@z5%5Vs zvIG!k7ktmWTzjqXC~!=`WPtK9!4+uNLH{o5m++t8O)YUC+@EwR-_N?0C<6>WA4sHs z5j3JlKhAF+6&a^ec)l8Xx)qd6nT67WkFmz-6xrO4@NDgdVu zAFuewlj*#Fht#|)2Xh5s68N&}A2X-e2m$0E zV_BS~#yb2k(ry|c0O9B5ev#SH?UClIcLKo$%~$=@Gt}@ggc-_?VF)vxo&Wr9 zS{&?PEe_;3x|B{ZWXGmpC5jE0@5x7XVnhXV*r$Op=nn zsTU5VInY_i^T=A>PW7QKX ze^CB2Mr=~eRPdgwrM|gK*r2Ez1hE31CEq1~E7;|=x5o+pAgF)DlAYci%4Wy(9kJ$7Rwj=HGo>s;%PRoFOXAJ70jH z5!s8Jyl*G{*kt2pZXcI`d{b>7mrUeOc@g^nc-w+4NQ-J z5BtE>+y%kcKL0TfcU^YPe!SHvP??nDyC`KeR+y&KKZfSiwg=Z`h;Z{_8Ve@$Tf9pQ_6q@r6k4ZK}RLe77sR_DqasbyJLmdEzi*7n9=TUiZa zu&odrTP(1pN!?;?BjaPYO4EawfN~H z{V6g7uy|eF3O+=}$1bmo2rwWSmzU7|0)hj~8%5g$H^f1j+S3aJbS(P`9$FoqXVG&)gZ78{Fn%)x^gXd=qelEW!AkjO|_ z&+#6i1rJpytM&ygMciC}@j;dcydehn`XvVsE$fHlk5p4{esz&)V8Y-xG4#^mh3HjG zRJ4jY0)&Z${Efq!?bv;TLfoO=CeW6Gd<$lRmacm=NH% z)&NseGcN8^fHVbKcs+_$ZNCs7I7uELHyEI?H|^ox3U3-6v5tLzX-zJ~e;>Xym%bIq zo#w2mIpj&}#a*?T`Mx|Qb`f>_gh1qXB;z)73hbwCPU(Z&dJ z8(?b3%rb7nFb40|7u2~W+L|?ax62`i34gcczJ9;Xx4iSM-6_Isys9UqD@O`uyRAN4 z2QyQscY6Iq&0#2i6s1J8A@?3eulux5Ygb$st~Ts6AdS*Xr$LgGwmJ&-ezM=En{4&@ zI5fg1pGe-nkdBEWm}ob1(R~Uv{osLd+#|w;3(ckNxV>Mt9aH%=-IxX&+J4lnp8Dz6 zv}!S$4_p|Grz7uzAGN|7f>b*85IlI%r<^?o4_R`#${vP)haa?BN|TG@=t?Ve?BRH) zeY7Ik+(FQ@&V(AU2jQJZXdXNzCue{>JdJioY@S{#cpK~e;s;UkG#Aa~)C2Id9HwGZ zmnV4{g+h%UsxOPpG!oC_K)edhFZheWG~Ajkcw-D443=V`5-{}N{;4;Ig60DT3T{-V z@YlmGdgilH+1QYlV@Q20SCDfs@H zQagiG_>oLP(l)mDQX#+Iv_;FPs0GD2D%4xj^96h(Les@G0{=_@up$- z>xQjGOxrcA#mG9YjK&jnGLh*kmC-fV!@lW-{^hro*#2bFWt~FmhIk}&E=XncX51n&l9z7R_Z{NOt`{MBL zhcCo`K=k;l(FAr#`<26sNZc=8;)nM~FAl`>r$;Z|zdbDdf=@vcjM5Z*RcN$%dV|F}R# z4xb$#9yHtW=9=HS8dfdIZ@+!~KmQ+4O9u%3j8|L&HUI!_b^-uUO9KQH00;;O08$D8 zBe!W0HR}rlQVJutR~m zEuhbRoO5pT%M7;d<+^?eWp(pny=v<+Y}<0ZYTm$R_Wa8XR_%JVfR#71=l}UKOVHx% z`Aje&=giH8n4Qhydbupy_t<}ItG4M^T|#q7t6~l=CYQ1S@Dd?mK$DmNE(AA5VUmJJ zE9o9(^9Jh+e9_-(_B=z?;Mr`6O#>IWDBG%g>Z|Jw*5wjcEmXy3OV9YWYR-yZmYWKf*kUT0&)vfb(-qbY?V(ub;zbSdGuD62 z>v{=QbyK|De#XBY1Kh$z7xk|9P7N9){)nFB;May(>tKpp}nxDFO z?w5`{RXUCsk%XN{rtJv-F@tE?7 zF;#3BEjcJG8H1oIatdRh0;7t`%qQo8aC`JFcn6@QdKyGgoc9nRlvUZ@6z#fb+I5XZ z3(e;OR;j4UrtPmD2QDT8*JfA(L*QOAkWMBURYt?KOg^V9w2^-rGm!+bh6(Daxs`{& zmr#H1kv0W1MOv@055RWSy?q?LoQU4+p;r%efI8Iyfd>jwHUc?=xQ-zUCUf9m z7+RZsuplLm2Bm-YHiog0IG-=@y8XReVAGbXi{f>8O%Vy(i-O3uAU#|!p`+z?_x-8h z?A>ZA_Z|@DcknLB3}^%-uPFlPcw)h@fWc+MTuAhl$;v&g4D?+YU|kdBpQ$UV2aryH zGB3Kp~n9hGnS%*A6C1)>b15Ix;7Bs1hs9HDG zTn-Z{hMEZp99c--{RyHXq*sU(6>hVm{1V41uK<5gCf&oCd@ODEs?SO6cq1#YOfr$V z@mg@NxJ@>3XJd9z#L?+^PYM&s`xbGXepvtPSrtDNH}bR`kV9q`h!8S5uq11ShG3VI z&C!1*O&l@as!&C}gPNY-m(-((zN_3D^89b#zMD#kV#tYhD0I;wMq&f<>|RK)To|QN z073ndIq>WuQKUu>_V1~P>bCeeOxefT0mQ{+*%WoZx+!*jU5qW8XCGIC2)&~Lo9;Z- z3h2Gz&i}}P`JVZ8p{pFCDee=^0W>KB8DD?FycJ}Nr4F3529Id%iALURtBS(-zb)C; z;wN6@dc7>ZpY;5lrsVlW4XMI;v)ydgb$gJBt}=H^itkIt_d1u7JW}LApmN~30-3o; zF(=2I&e0p>IZN}DMoGBARU%d@PxJ2i{Ga{CM)n%#F9V1nk$}S5)WSj4^@5jzbt0uYYJTJ9#iB43Cyk5*3rwUy8g% zlpc*vrgIHshGR-@vPG(};dBe}u(;g_^GEwWEirDt0jXd`A{&ci#d4UyF>?V<$-@Liu`G^~R@z&F3t+eVi4_xD#+tH02SL@l=C zr9Vt7k~~qz+iT0ydB*Y+LqthL1OjXTl&tRLzfaw&0tk`?5%*xR(rr#pB#|^~KX<8n z?)~_$jj5N7H=b|2J3csibv&H-8(SL}K`2jer&7JG{|%TTGgY3jt-}j;{j!wPk+4md2Z*7d?D3ej9-v6^0CEn;tCR6oa?@|sA z&7WeL#J|c>CNephhF&JAIWNs##eQ%RNdJi5dcLv0yZ>-|_u2ODzIyCpH}+lK*j{YC z@}axiyN|c`AFn+0VU35Lj)PRF|9LB85EpTxf8M@Kq>NO1p)daCT^C;)ij(YYw!6Fk zBo&c2k-qRQGBp#~SeoxmymS<2;+Lb@mHcHW{yVsqkvNxOd?UO>iXcj}WH!ozI7&qv ziLrV=i^VKeA7w-KP#<+Me~)WC^v{15?`4(+(WRJ8)u_aY`Xmg4U)imF-^CD~)OhII ze?%toAG070GMPRXe>?g~?Cou-;rO%*^6}8>(Be+wG!uy&sedc3Ws<4|}dfS4j+l3vnCI^q!2=epM?-qr8#fD4s}>j%fRDiBTAguEggT3R6A{+V>Bo z_F>>1{a&kePP@9J~kQd#Gi&;W%P`4)2ELEKujpWpH)t49Ee=N*W z{(;%618}qevBK)hSt1vv#scf+ra9Z2n_@tFJ=Ptyhd6yen?!z5*st34=^%Whfqfc` zvuv6^-`Tmjxf%W{v-3oKAswpYu``z8bSLnox0Cu;!*MnV|D4Kfdp6zv)xUZ$)aPV$ zo|yA;*D5^O-hZ|_<~sPRR^h~KfBaNQA+-s-FuvRpsvG*v%}skeMd(GBGbOV{D6eIx zrohNFi)x?WtC_LO^I62x>`qv#?6DKWtF(!SLvdhbrk8DrFdh-!>fWTuXlJ6PdFNLp zN_X5!$B;hzEJ)4S5=n45&bG~-4>EfK#xbGM=XbNHLT?#T8-oX*H40M0f1}t}(B%i} z7?DztDyd8urq+6@nh`Qd;zVufEV)%8AkDl)Lmd6flcVDY`DvipCt;YXf0)pr+|m%M zo;Fi6o=Wuvg{|3`{%sgsnK4_{Ak}}wvurxcs-db%joPat@6?w0{P{Eg2-Xo=>e)Xk z#Er#;I{y47>WDDag!o0he}sJ%zp$IzuOnO3gMXt&&dzj8zx<~D{6)9VZ?C2x`EBw4 zcEpZupWj|hd7|3T!!rLBM!t_|mUsAV))XDT(G>2eQT_7E)-S4I^$Y#}%WwP^>xhQB zd;U}YEG0;?BsiZD5We!J^ym_fk-f4_6Z|{%#u{Jevmo?`mxu_4dJT!trLrDp)GGZRhaG3EQ3utSHDW+EVMlu%h6Su-G*{a z(*|w#Ap2;s#dtDQ-y6@)hrh<-D3Q^n3@2VROvj!d-e;M%d@Tcq zFG=fQN+PFmO1e%U5n!onu84_uEu%yAcjASEY7?-sojRz(-^R5}3jR~;fPycTf#}O< z1WtUNbFGhq(os()(@;*-dm3cLWfIS(&+Vy*lgr_+vna^ae}AWeQpL^NTiTF=wwKB^krb%*3pr> zQH5#l5e1~C+DkV2-#)0tc^i7!MVw3ktf-~(cBa(o-T5-Uyd=wxFYfAUviha0_$W)o znbJPfRQk#~e^9@tSHX0e|8e0d4OIQk??)XB<3F`7YSD`<@8d7zIMNRCESaslQ*bm` z7gO|f=8e5j8_&yV`etE>OkPbhxftf5r}jNM#JUD^-q`!h8(p0y-Uw~+VNIL4++yT= ziT^%Jq&G=(wd}$RQ=s*_P{P;49@aq)K3qSn10DRQf7U^Yl5GW`_CqHK+@*YzGwo0{ zk`7au4bC>)KDV=tYE-XsYd!47ka<`KAox$M0|3V0`w5c?oXoWEX$Yu{cW1b$uNlc?Y4CC>-zN` zYro#3y|Q0#@iOAW$zeR1#t~^>J8!)twKoxq9zXj|3o#cKKE*5;7480|o%o8XCi$|H z^YlQCBFQRlWcVXv`TyK)XI^@h4v(bg(}Ve4e_%<p7oKL3N?U77JNub{;tPXxpSf0Ywo}7fCy!1k2fHdfa+oRap zVRyS0s~*3zxyc^@3$4VaI1p0}#QG*#O=+ffm$Hqos;@7@Oj+=G)?cz9Q6j#E)@wDgJjH@Z08T`kU34f|V_>5NbL*S9XgSk@hHz zgaw=_ZjWMnr+@`J{KvDfgzqQB>&!>D@|1@%!zP>!cXti_==kOF=`k>P2-@u6!yv_09YV6Ip}#zN zf65=Y+v{3$;ODo{lDl25=(zv?e}@xf+}--D+#c9GquRW+j@UjOv^&EH=G zlM2BY|2EC-x4o+!pp9-Vyhm)nL5!G3e1zE)@AQ@+(i%C=#JM`_K9R^sb#^M!d?V&D zA9eVHf6RxOu8f$+h%uQPF?JoS<4LWBb~rULWF7-Hr1)z#PU4$XRJt_zf8BtrOxq2& zKa<}Fz`W$!bdTA9wP@3k>)h-;`fbUOTemJ-6>|mHUXLMV&2~3GN%q>#X%O;d&f^9~ zsTkx4mc=jQ8<`v`tQ$N)tkTC#tWwlU`W{l=N@72fH-hd(taYBqY3PmQ3nEkIQ$si0 zYHc3ySLS<2&1-5(eGi$de@kNPC2J=Idm*59+SlHbOYZm%hy z^l}IB1W_Av^_>*NNI$5(%ZDd@Ts}OxKbH?r8eKk&DG`S+zX(bIe<4#+-Oq3J+p|ynax4XlDC_hTizj;R%FEb_FOwgF@knazkAY#Axhg=W%Ajd)1av=Q$PTKzAPP+HtUJ%b~nH^#}>& zWg*Z)C~uxD^iD-oZAwR@twqB+AJ2=1)w*{QT&u@w&-}|E%>)IQlu2%Uxy_H6%{!ri zL?rsZc^Bl3e|dY2GV6o@eq3$dllNJikZP8ipM0yF7dqQR&@2>}jJTvum8DFvuqoZ# z7v^y)(%Fr6k%q8z_SCK%^*u@ch_Ni}2TR;0v8J^}S54gOMDpaY{P1 z6JA(ozTwZ~IFw4W&b;u7ypvW>q7*261qllswMtQ0MYH(w#@!Z zgMU(-JdjMN5pWm#f8Kd~|2sO@7~E@ZC&vwNBk0!KiJWqLamEj0U4Ch1in6HmPlqO> z*9cW(fcRI}ZXv@{4s0ipZZrmMbL4bCf95C7c8GVR9KCCd+8_u5!LiG`);e5)joS!- z>9tnvcemRZeRbQ!*wTK8idY52J%UBbmS4ZCMbVmhMX!W}B6u64>ih(0w}~8Pu`#cq z^TLapb`2I z@byD1taf$cDUy0gJG=-&wHgZ=R~`&pSBGya=9axeZA8_stPowQ0Y{@TAf}_Cu7!zs z5uY`NzolCaoogNFM`K8=;ka`+3ZFIBDfJ52yNuMkhOy~cV~8vSb}6QJt&n!lN@JX) zmy;OzzNkiclThT@*qcrz)xf+Nf6GXy38as1<5^;2?$%#^xVqoi5x~Dpe%2Uh*8`XP zh;47r{e`A?yX1cDM zUE_M$)k_%e<`d^mLjulPBNS|NN5Qzb4mwoLT^bA8zGP{1{V^MXc*W6DD|7;fF5%sMdxbU} zsg~(<=wTbj*xJfk4QrHFHV-t6aIhB}eyh-g-!8;w1p5VF$<0sQVrw_3Q&pL zbe_~Lf_|r4z;f$JOAr^3R@$Cf)Drs|I@SoO@-UI=!IUUJ-x2ZouW|&OWq^nc5Jwy2 z!>6rbDNS_8K$aqT6$!lPBYt0iynp;N&ZA}XAJ6vDS{TWhf0=eh=aY-X*I^v(Y#gLo zPcM7l2n7bE-t;#v*V#GQ+ zGEqr`2lNMhd2qJjdzlBND!^IW+F3RnX}#_!NR%!YC$|IYH_{C_!g0P@rYo=IjTX&F zC!km$zEB2A3aQu9p|dK8IgwfsK}Ou#U6%Xtkh-D_zw!Ct@g^VQzb zjO{=9f6e^pm07;p7kYV4*AvlL<+;e7KBrUnkgtezT*6U8P5PukJ`#K2LQq+scT z9z<#8MI)(96n#B_;9)an`RcS37h;C5GZ+kP*XXMc?8Z)%;()abCU?RZ&%$SsbG&;+E>R(`9THRcRrY)`p$e6Lb_30<0Jh zJL+XZ2KN*vB=zTm;RIKS^@f})GPxtv>C~G>H+p{M3T&z1vqe-JQheoj#9jr3D-U*Z zl&gFVc^@c8!-S#R85TX`N1xr{25x-@3ii&F*hXqWb%;2czN2Z5lD&F08x7;N%cSiggzOSp zVeBd4SlAYVvk~Uo(D?>}X=1zSQ+H;``Mj`tFB7T<_SeUzs;j2+;+#^#?FFjtn8%_Y zt#>W4G6yq-N2P9;Xq7guZU(>$ussVDTpSnIbBZz^--vI{DI=nB0NPnO_9?xIxk8mW~^q}Y~CEP#?_Km5w^oNUstKL*Bz_7YO|6^gK5+&B9 zHr0ZC(D8ANYnCm6eG=BsUKm3_7UA*Xylr&V%H8Io2`E0_^3m`tQ@F{7pJ>Jmhqo$+ z5e-q@*Q8HP+v=1`aHLi)Wd@FZr$r&nFb7r+!lo3*(BKrrDPU&>4096fnhTMQ9c;?N zAB;N;t@OF*TLhd_n5Gda{!rMQnc=Tax}$|%9}y5JW>1;^5iU5(RI0&+NT0D?_VgQy zbj&2K^DpJ3+kIrXQg2czAUUvQ1QwXURd_qDBiXzRiv`(j+(j#+4a}O1%AyjGfw6ZK z2QoHg^ts56)WoR;;9PRy{o~Lz0K@#kb;h_jOFWU@U0;?&IHh`r=VESIoPPKcf;luf zN@{$Q$dl+e7RbGF4#pby>Dw>;eMGKN0{XWkFmetU8WCvgEX>4Cp<|*j8~rWWPBTNS zBhYmlcCqt@W+Nm>pS92O^($pzHbM$?(SCa>FqOvYp}>C((0a^BrjsC)4@9KUm2Ze) zWC)a83o#mQ$*mUz45aA8^mnl!ZJ<9D$E-h~$ehVlXD<+R6Sp{!9XIjSe@;Kg=Eb;i z85ax*D3MjHQepq1kC#r#bgA`W7z@4@s!3aS?9a#2k8j^d7P0ec`Bz?5nEta0{v{|8P`DTnZ{JU3WA z-Vf4)RK+vWq9@y#0nk94nleM4MwVyjE(>n+Yv2#A!7?kzvZ?4*NVxX+3(UHG_frHO z_&pBE82dpD!v&@wcOU%uhg*38bTA`Z1=ewJT zqAv`ou%>Zmiq-wZc45=q@^kh%u_9T)NYA`~GxBgHv%W~I8992ca|!XRFSz0&mcb3z zz+Vm7o`*QU$l%IitBM#N@5_H3!gIFB)4JIR;HMAyh9PENN_^7NEy0zXJPIB?mGjqT zfv67M3JONO9!f7)&s2OfM!Vdy_+TN2SKMl~d%jkxfUTRo8UTQ)4^=#b~wr22VSFDQFA##?mjG`$7*PBpizrBM9DHd;M{h&Kh;D6pQ%EC4!jiqh?IY0S?$*~M=O zD$h5El@Laf@fopS_$u{tq|8mwqCv~5%9uQcQez8jT@!5HHFf5I$Gk$;U-E`Oa#m0` zj%4A3s4t}jLf4N{#~JM3kOE$F1hZ-puna3!OeL>EZSMUyKH27w(~PbUv8TQ3O%)l| zRcsLR!dE&H@+!sjR6&7Q!lF$@b*)+15nnlK-{+!>T-#Su2fi6?(y^ zQu>u#`CM|W(GaC(rBO?K#FwB zHw;hiqFMox8RVY8h-)9nUZ#OSh_=#MjGBvjl-!t!bQTUYt_8lvcWg!>p35P$*NeG;$) zWmYXkwYEMwR-`bg{4pzNOkJ$gQ?f&ty~~gJ{tyBq@IC}-f!hx*yUBEvnP6Xs|C&q` zt`Jym-Qq;%F~Y{9CkQTNNRk;6tY#!F!#WqGKYD^ugCr?!ftjBtB%P`kxNkg(H6N6s zv&BQxP7=(40i|oXkPtEIoG4=k@%8&}_y!0anV@iG4T)gd9yHrq>hMoHO|5 z5XIRq!k8$b(lV2QVN4c&wRe@SDMigA^6-S2aCH`PjHldU~B z7WkJ{4W`T3@vS2PpIK20z3A**uY(q^#X~Kb*0Pt8DF8IZNmiNm&kN-Fy zka)W05ygbc|IpKS%{AHof-5l3xMU2t0;d9UFk(crtkv+wnmkpu3M%2<>Rk(Z7EDX< z{AF}_N_?6|7FPhoOT=%MVoouL}t zk*y!mOAE^vFa&IJW@}?VixA`M+CIBj-8+;O_UyURC9}B zwS;nEvmd2K2O>_HKQ6Yd_-%3=V#*hw%^OeL_AUQMuI#;hQ&?BFM(@f#4Bn+5-LuV_ zgt4(CEFFU?80s#UU^Ia{tVwCbtez*4t}U)SWyJ6WP&6Xw;q1e4Z*EfIAQ$%N+Go%n zXImlzkK#?srW1b9G1QlXAOsGj{qhRx>70;VXgL!A?(iX8&v%uyk7%a;E4srYG~nU> z{MflzX_`-9wHCR?hED4pP7yI6yW6wFW)Sdrb7UYfa{k(+^`ObDi11v)R<=M`nlCjOI7IV z1SR5M+~oo{v7d_+oM)F7N7Sv`^*Q#UTo#)KKv}Jb+8V&4(eV(3IOmUC1D|>++1?d{lTli~79Q+KvJ0vydAXo0mkr_|29sRllP@p|JWq`ePZo}~{xDhv5s)3z z#XWE$lxVjQm2l5}b_r29lrK3?z}hK6TK4EP@6CrQ_GBp_Xd7l^&%z4XMI>N`E?}Ot zNn>-b>PVLYZB`@NW##3yOf%hS+^i7+cth^n-22haMl|{@5YDVsp4PD?ou$Sj3`MFJ z356LuaSXNSb)dBCvcsQB=<)Hb1rGAM@TopWj|(#MxV`b++GsAXfpVdy!YjJ3U>RkB zGe-WD!^k?fk=YP5gc08F$V}4uCpA&)drqiTz;u?03Pqb50*|u-?cZlGAF=!ept7lN z+{9~u7u9phYo$*6i#*fUS#GN%@mW5hO_SW>J?%PT58_BAuv37+ zKo*!1MH2F=YYzsOS^gD}z{zCD^uQBfcLQ{abVeXZZf z;G&`VPov%AH}9>z%RULb=r9pzg0=To@V$Yhqh}=EO7*WAFHtYEzZ97&6Ef~l7mHro zUUGDqM9lRrFsH{;_#N#5ojp(c1}mFIQr;~sHntutLgOi>O<%-mBX&ITI0iEwKEQu8 zI=!5;fAv@Fm)1H$dZ09{)Lpl(zZnF$$meckpfzL8p?$oo-T3&s=_K1O9`@CrW zYX~Y+qP1NM?prB3IP|e7Q^C+H7Hx%Ur!{G2SD1Zcc_;>!cEX~7J%uUl6P2N`c9b#1 zmTQo8@?4xMy(bSidzQ<49XdlT`pr@xjTwPA@pnU!_3^`mktfb>fT+YQ{i(HsvTKET zV+lC@95VhAW(BxXxxO_Y=oSP95lo=Lj&lEC6gR31 zG@FvCKki(`FR@v)C0LJt6`%sig^PO(V`EBSD9gpO8()0zas76ZbkgB454Hx-odSDB z(i4+T;r#`32*`*3`wZ^!?z++%G?>xV#00VrM9oUt8yyHx&PgCw0S$M*TyvR-3AdWJ zHWD8LvRVfiR+a2;xy+uV zvu#KlCcd;C-qy1E;o5!+jl7tO&+oww=c0;r(@qmlX4RjJf%UJt_b7jM_&(T4TVOrS z{Vkr(Ka7@kT?YMK z)HhZDaTD4;>$kO*>-mO_`6^l`0(<-CJ+bUxpot%umQ%T0e3Llx+!8=6`e&jylb_{E z+Epd=w(N|_3zcEnExZQAxKO|Ch5yZKs1bm~&U)4QQ%Xp3%~t*t3t(1YzHtm#+UmZ2 zKrFsPFI*9ed-(OG#kHZGo8mdDWMZB@)P(8-^1}$@b!MAMB@P0qjQU!3ybQLNHO<~% z+N>xjMOyYky<&$f1rhb4cw(OmaA74r-td6*{1+TrIKgX9cAcB&wZG|K4sIO2Yf#v| zj4YW+h{YhJ->Wa$!YZ-+J=?3F7dV7d* zL^}$Ogrrw(g5ZJ-Thml;NA8D3A9_5OKQGvO0(Q&n9H_E(q>Gb(KETmf?dc)oKJI!H zhu^q*lWoa{oRof9kI_jDXK!Fu*4^>|79p+hq@GfA;C|7_M6dRp!&25@6r01m_MDM_ zAqcE%teZlyWRz1tbX*uHfU3guurYedERVoKLhntlkH)bibe?|>ruN2IL=fD&l(%vV z;A`TWkVGRa z>g|r5Az&e_< zASSLkNTHdo?v8bk6k(c|q&Nb(0;u@JTUSwKO`MNtvm3iC+1-LD7Io($xwfs?7m9dr zif4uN$7>8`(u^ z73Xrs{{@}_su`)yICejxtE=Yxxa%(b`>Dv(y(E@`#i2hv8i+@Wv6D)4f(iVC6WG1X zvL8Dp(uqbh{&qC{7MQJpk^S=;d%)gB;rh>y9iq}>w}e`;AumTuQ~;+6cDitD*}SRt zEGsg?4*OJ6pxa*m>)Ol{P#NaYMW=vF-PyKTlV|17R$=x`v8z_3@#`U|H-=bIfpBR-ex@ z_iuK^X1{Bk*MyY3cNn30hkVP{?!l-!#R7AKO9Ol`YL^>Yx0elVAF0#PFt3{!eS6|IxJ(g@cE}d!zN> z(E0U(4rXa%rW7p$!2DP`5RZ|x>z9S&!{ehcQxFsQTapJQW5Hg9rNJ~6A0-1zdc14( zib&4PxbhJws7K*!AA>4{JUl>@NdxUOMf*GxxwE()xwki(?}x2~Kz%{a_abDYS<`F9 z9+n(vquqBs1P%6(`J;3JIgF<_&6DRO_eUK%*XWsiC|PJ6U?){4tT6jYqP4}OS_N`O z6h9WApUXcw_LJ^u#J#qy+|yu9wGj1@s)jJvv_|vG-T$rg_8z#jraBdRJUvti%Zp1M zOR0IeD40BXDpALf+|aQ|rE)b-T?iA2d-GP=;7dV{hvn4%i8_A+Hb<@e&Ui>-cVcYIj#d^1% z(?96}i^Y3S!4UdJH;c~vFZmSlJ|sXJdaR@lZ`g!I8u<^cw_+Wm@)|KmJ8^d*4PkX9 z>7OyF;X1{?Nmj*=K6EkdcNDmew*MR2la6j2ija*0W^IKy@53|x-Gcjj@Idz-Kdff= z5BJ8YI?vubt&S|h*YA=;-I6jteV8v=u8SKHu19y>XS>cBo!*0v7x}kNf=iZj_sb58 z=jdX*K8Y8qvIA*g=cSe%JI8y%F&BV#u#VeRjYF~8L9Vx+fyY4Sgqn@l(`Bi_+?cD= zM%+Fish)3LnrpzpuHy>eAa*xeXq!p3qq!wZ$nTRc2&oeTb_0!LCQI7>pJpqOw!alF zu?A;0e>rG#|JVIlyzo%mzNMb{Bu4kGjpF&qiehEL%XbymjnS^B0@cXNyvJ3Z!@ROj zyG|<_>l^uIF8Jn#HeBJEtTzSbmC%DY>@gs}yY%!odI1&bLTI(#Zba_fBR$ zr^LIu{Ln>u^o$Hd&hCy@Y><{fuX9M^zvmowva^7b!GUGd+_U!6M?m=fD&FmRSLlrP zfA^eMb;3)^nh4LcKT5)SdHl%5x&JhAB9iPuM&Ow_InxHhBAX7znc-lw8&d!d)4JRR z)flrI%_}e~nQ3&Zagm1h*0G<=oJ+iten#w9sI4<+%T*LP&6iMW541|_1y4=5g2lClxr%n-@aZHer|sL zQT`yIo>PB!NH78cor3?r6hP9p)B!ds@c**?21eN?vHu&z{$=a^9|KU~l(h6|IdJTNRYjS;=h=;1v@y@f1@A=b`R12Mqf?r8~^)mqmx~L z?7tY^E<3{i?w~(rA7}b6_KLv)^1riR1RQge|H0Dc#5sNeTsGN}dR{aff2XSYFaYgt zamsB*B*`B93S$ogudiR1EDS4Vy)*sX?P}CpZAKSU&WU;@M*6$?a_gREVBL*1yKxPb z^>)zUHGygcYl(W!uQE?s=_>fES z6!=b{a8`_cT%~5PK$)pwto|i0qdQmZHIEFRbpB@HcWnQtVAp#%;A7Iixcsrj%YptB zCZ(6jm7|-h0%)IpncoTg!WGy%U!(IruPss}Y?sObSjo3(IJ&t#?OES*qPVM&F=^G2 zlG&Nj$&0&gkfXcIhXf{#dfLG%Z_%STtMe&XTv41p*qk~moH|EuGd)k>Qy3MxBZFx* zi$jw53yuO?hH0%O)8)f#T!l)_R1RfRE>D&2j-SCZwJ22GLlr&{Q`{?&=0T;n z#%qBCB!sxn5}U-|B)fnYo6fPi;?SR$mAZ-@OcuS3S&f2c;_3?|7nryXBQg0u5*2AE zrHzRb$?BpP@&ni5voh2uuaq_))IUY10^%fsJ$L9T48mLx6@{V&t(b+;Wr%4L6R>2J zFIklXkyvO%;>8;2R1~GdZz8RybJvsj_(tCVY;6H@_NeGwaV4k2N(sHcspGSm$O06& zxI@URgLm2S!WL2AdAn`o%Ly}&&M0mX!~A%lhEDbp0wtJ{G?M5^-5g+TY`Au@S}6mv z%}k}+6D8yWebY(=$1{a|@B#|De&hLHAgf74x#yqF8NH9MRj%!^Z_4JF%rY@RitdZeIcj}>S^iXb?YP;s zg~VU=S}n%DIgti7vm&H8QQ%bdSoj!L8ybTEqk^s%8B0ud6$D{BDCs-HdW870hItXq z*4ZldSp`k1qNO7hF^nn?Sk8?L%VWv_v`DOK(IY)<4m$|Gx*nGAJGjT}Ppev0D`r$v zT1{q*N7tsa_Ur63G&};(Zm=DuK;E3kTs)&9g=d5K8|G>J%Bt+H#qE+q7 zLo`E2$_!nUP@Itl1QYYY#^H9TOkj?Zt>E);qg_q2IWQNqaJKnET%^^CXQV^&=SzaZNS^Xs-c~%@0ssId%no&uBsomukMy!%gc`LBUP|YkY z5T7m!J~4bptO~iUFuYS7ZJNsgZ3~6CGU_qQ<*1>uWVXp0{&BhwDW-0bG@A6blKke9 z?(j|C74tWBqb;_Ta<&_qa4u(fbx}zd8BrdAz>fXI|=2 zzFIP;*C0PDkORmu@{oTyC1JsXt5wHLX7pbbE`;dpiHu*p!RCyF1LS-a-?^L&uqt_Ec&mvyKhr-1FM4dR`E&`lxw^TKu z{}O4YT8Y#0naYOakd%4A25>%Ijqb3ku^sdBUA4ayS^=E=cHDX2`AGfda$k8 z!epguaj~pEOro*3`U|^+T@Tpnq2kK}yxVktoE-876=IX(VOBlUdfuN&Pye*J)Mni5 zSj+(^A!!}8C(;Cy}!@9R3`A^aJ=Y3`L(X?+A5P3w$*40_7zYW-dz|C4qwFR|jP!GVCz z(EooE)NEM}c7T!2CTHunA0Q<34TXDHDnB{(%dt)66t2l^v#iA9cxP~tyMf3apT}lO z(4FV!>s+$cgc6}af0KHfyh{WXwV3qmbh)a?#g+fl#>P78Ze?#}^Wa3HY;0wCePg}T zmCuho%lS>y_gObjLMM#yyJY8!FBi_U-Hmf?z0rgj0dTkpu+!_V{; zy}MZ0puGlu2=jj@h-LFM91R<^yO9Cvt+0HKNe964WchR)D@S98t^T&BF?htD&hM?* z13cqm7^y*!WbAD}oyW86aG_G~R1r{b8#`izZ%D8K0NRwk4#3#Mg ze_Yla0MBmEY*9Jk5AD0VeBtR13hhIeG6NzMqq+bGV~HZc`nV+lLi*<@?-^hALw(1g z%Xrq+I8m&)VBA+^SReM(KVtp+lHdP4cjSDx#DA_ds2;}%*LfI%FAN%f)98%IA3E^< z`LfmBOk&S;R4ka|AVz!>Fy?Ruk3(2@kN}tj0S01iV@0&%Tf@Y|AUse+14Desep2-w zm=ZxP`E?aGEiam2LJ;Vly(UkJhPkiFv%nh`qzulh@Pw?7;9tZCf}1Qw&-;eNb9vqe z`FoNz?;{d+Zk(RaLNF!We2XZDDbMp0yoAATbvTr@6XdI8IHHH2C&l4Azl1y->zB%f z0K55Ws!rN@7c!oW<{Jswv$@$m^93DHC2Q?OASSZXcfua1&<|EE>ebcdFfiwlJ5CBl zYPAEgv@ObDd$wWgy-Bfa7k$KmszUPg;}hi2#3^BDkN^-F}!o>GFsP+^qEN7)dofP$~h8x zwm#@I7Ir|^>reM6#hcB;LavuJU0Z6qNajDC1gRd+>@FEm(4(ZUYyryk5^6CZ62>V9 zlb#}UM2S;O0jYRf6?A!bOmM;#fFY7>sp+_2d>YxJK3*>F9r@+F&Mfsl$!{acCPxXQ zN;>*fJvuYP1TYom(!QrH#?BOI%d{iQZYxEzfF$nwvqj1WE)BDkM6(|n zVs^tc=iV$0C9|1CwfeaGkwlH>(e}=5ny3i6S6Ve^zgp|}S2e%S@^g+lK;8c2UCV19 z!9~UU%tckZ|2Vg5)1yKu<|Fcx^Ple7NShIj^TAx(<*_&(LbH*3_@1BF+AyeXBiV5eYlVtaF30)rVwtZGO6Vlp#?Xcft`#*)9sgNt8fp%U{1K}j_ z(a!L5jioKmK+L!DBuHW(S3ShaH4ZR2nLrAQa9627U*5LTc$tvsMbQ+pU3Git_*LT; zVPAZn$mT`$4#m>?N4kes$xN7Mh1zl7&=JAl-Z#|6bEOV6MO*hiz?9|bRg_=lAyF?x zh?h^+To_4TE6-#X{r*JNK3?SOw*)rd0%HZEYZ9aDRYjH`b%xs6%X5v;?s?Ed<$0+n zo0PM_p8TuLZq~AW92gw6IIUbIh`IlUdH~Uba+M&`6JKF1x)q(>fuA=cCD6Q2Y-jGEZ7Cd1O23Td@zJuT$CL<4_5`RFuyy zLX%xgUnS<%a;(EdYrbtcNwkJT!$qRTc8--9W6Az{U?<};`3D<*IYKqCajMR&U<5Kpi{Eq^FG zQ$r{c4bvaLGu>!#*?%bYMUXA6EK)`YaPj$&sp7MW&4CE%O0q(V{M-w@ z^!~%$RK!?EmYC62?dr=?_1R;iUo%nJQnK385=Pi&8aNSY`__rS9L~`^n?RscBL!^e0LmnG18itF97$5y0lAFawQ-Ch=8Hph z-O<(Q;QIpRk@m-w%l6+`+9=OHdvEx$zjo0cu3NinY)hfD1Ju$DGd<5r!&8Wk-TrdR z0_?|mpk!0CfK~^K#n{((TR^E;$R}q4Z7O@Plls(7AbZ}0YQ&VJhXP8zJsEeYr$i;5 zhtM$}{%rDKXJ3uWZ%7&8pAmtzPqTGyov)o1GdJ>Nrs>BiR&*5Meg8UobsV_7r3rMM zLIa$N!A2SLp6IA6U`IIfNIKEZwzbl;0a}3JS;!6h=T@96(jDq)v?I#Hy3}IC)}?fB zhWlFiRy~nrDOzt#qt49fr7*_Y{t23ws;=?XovM#IfMd_Ce@1YbF$<9&492wibS~3w zz}9p^kw)%U6z84jMBvdO4|5B=1ejofRWGb6T>4y`&`C$=Ch?Kn4v@czCdtn40kjLG zB}UO2FhZ1#T{8~ERsQ6PfzMkS#WFR-=a}kON8tMzwJ9@sp;Aj7O7IxR7Bi=jP7&3IJv(Hc0i8`iyqGCsAR0UE4|wx%Lkm^z;L3DaoEL?zb|{$EXjmlLaJn~B(V z{aY5Z5z%x$=#h0^r?12D=sBHAWYBdR?YxeKp`1!qWjnOusvptxW8u;|SsV70ypfg{ zu+8We5>_Q1=PFh?SGaMq<8m(Tx6LSYNITE5iE2heM1pRBu?GPFzx4GXV5Q2?)LV5d zq$DP7pdvUS$pxywG zBYOw|kJJ_mJua(T=CMJVU<0Ky#$*~nlw{N63FvSph7Qy;y#_ncao}ZO zme=bMUeWdij=TR-0#zSK)MYTmzbw%hXfK^sn(P%v;>bW6ju}H?V_H8KytiJ*E91zp z6jf;?er6_x43k|1%y{>sajss4RfV#%i9JPcV}8HCXNDDAY2%mfC@SEbs@vpwd`1#&3s`TdRKPG-1WKI@Cee}{82dw7 zz|S~mxa_I#Xe_|Tnd;|C28q^(8i1qtJD1_rYnh3%(%%~(wuq%}{9uPPBrUy*7n%ZT zh+S?C&*rNOI>y4L=50(%8K%rHMTdy|#ly#EhOkKcv}bCZ1X798wrXhZ37R!Joe0E@ zI$f>kBewZ;@O3_VVZyECQ?DzaSxZQ_x|?yNJ+t)#)Wr72pqiu0Cbvp!h9m?Joe5HF zF1sxCk^BtUGUF<<-_2l!9*>UI)Wcye;%L#Zn&tn3pFVA&Ta(L}=deh#ACA_aV(Bqr zhFbLyN*uAOgAW$sCZ_U`rHCNF`qo(xZK-(-F* za=%O|g2DMxLegip&PStyad-H#mtZJL#457W#xOC<=ouwj7)#Xb9nDzx$TM)m?; z?5f3C+{ko*K`FY^0&SH2Iy>-}uXut%^qxzkaKwX|ThIx?XsgfPts)^^I%;2+c1u$Z zMwK4`cclR+?rM&AJPl!?cF+A|(4ZGlkNqoeiIopyzzBs2Fx;#PTp;i`!iQrv2pGuv zkYw<)B-zT9^z)_H9{*H-f==K@k0Yao+nsf#JL4v6u48@`7`*XXft*iPO{z$w z)fPJDO)&lbscG}~dzdr1aJ3aQ$JC9`x8yUCsN46T7a#g$ojv-vnBtESgZ?7Nn5taJ z{1O=(zf!+P`)KSv)(B%AE|*?-lUMux>|3eAlV{g zmN}SF==IvrXw=sb+NaOWjkad?-|_0Z$$^Aq`2^)|h?@W2=`l|<>#6_p+AxUjf?HoT z)$8-WEq|dV$m)1RD;LOWdP+W^l&a-LZDtH0|VN9fIo?b92xetASpm=KH zG1lp|J~@Q6R4H5TlHU0y3+5{|9qv8^FrxHG_jx)Y0#~ORuI3U;7fpH!0rQa33}_x=BLCa zSd_?%d`tS!g(f^Qqdl$tSr)6Lr&WU1dkS$iLeA+t*qb#fT=3t+jTL7BZK14w3;-Kl zHZN?AcWGs=FBGs?G~k8OP7S+?=H8Je6y#CK>+McV8+Z|WQuiC~fr5!wl}s2(;B#?Y zPnsIfNAmMS6%AqwVK>l-{++Nma+e+jKUT?`p|{}$OttE6I2TyYZKv`imBLxhU;csI zw9vm$S_0-AOz6&yNx3lqZt+amusMF+v+PNDv|cAcBO;ItUN_s#XSk zUyYG06?zRI4;FlO6MScyzMziQe6Kydk^+OPuZz|oj{Y)W79dQMdp{m9!BGJp!fw8R z4wT2as*AujW?mKjg{0zit#RFWJCbVYt(6u0$Dez>y3p+I{p1SwrL5%nO+|+R5t~Fn z$&eP0BOv6s;8ULqNCzQQ6sz)o8GfbdnCnR`vF7>MB50h*fH6|1G}$S2OOsPr)b7^KkN8@0C z4xP4<;u1(b8(aSn#GQ2>(s0>+Ny$F0dg(Wd@yqxUH83`UX5ne=)lS3Z@Y7 z%$CX6+8wDLmyH-5m;GR4WR6_px6xhWVN#`B00QKgr;v+?^r?!hE!IJ&;HMXj`Y9WX zNA&v*ZDi^VK+(xtbMclcz9L|CRfg!pSwQVr<9O93|ykG8H~*LT zTbyJ~u3}glM$w61AvQpd-CJa(TFvuhi=nWit}7gvI*^g(=oKMXpmPbk+Kt!d7culv zS-QstfPB^{PgziPYLumFGiDN}1$~=emIV1#T_*?egCxw{O$ib9X%bMTYa=s35k7L5 z;9))Lh^+|`GDjKHxy(r*23gNdgC?6Jyi-xzXILP-Gl{06$hl4EiueIfht2+Rn&KNw`LKp`D%6T*N zXQ@7+s0f6nAfTzy3{}(OXH$ShU8&Teu|M7CF<>}Bq^R+<9_1vd@qCMKDU@oPp4+Jb zcqPdb2|Bbkk;;n&*4NNZ?5Rr{^ED0l6H=4D823_+Gx(D`!waw`$G$R$>faO(It@pM z7_DQ0GO74|jIW!Y%{#Cb`S#UPx`tHnNxi8Y53?fN(6MEe-mU!oEOgs)8_dQCV;U{u z(*>tAK%+5574h5~Ee2SS0_fqM{P%|d9Tpd=WNVXYJeU^iw2UDqb@cSNbj$@>sX2;I z_rOpnZnR2pS>B?0y8Pc@Y-tXObV@5*$PMJXviV2gk%P)@zmMrXiYd=wrYAKNYvUo9 zF)V!i6={w{6tAFi^o@mF9&(c<>@~zDBb~`4ZNtBQ3Hj#d*KahJtq&{Eo?AWvCLaQv zfL8Ytb;21wQ>Pfv&{`YJFkujEJl5G@NLY2;p&7;rSmygIT$Ln{8mZD9g%OyKk@3;T z`yvl_xWdNx*s}w8aU-=sDT0*wY<=kFFo(C^rpU9Evb}-B-wMy+^HI+ zvcogv_I4a0DzUQVyvWs*1N}|`27eEsV%cPZab_bM;jG6&z_aHs%Ht8ZCDs-U4y86@ zld%(P^-%24ic%eXtj}7Pj2Mo1e~8l_@w!YqW_!S6oYbg7>BnZjd$?%vRMH;h`L1EY z<_6|%L8*S%c0d&Ug?9v_l4fWM<3|+nUTGc!!Nc$nSSLVJhKw$DvcyvcNT_sxtD`w& z7djb5arD(6>RjJMlU^L-S%7}<6yOxx%*8mC;Yx*cV7_>?(h7xSrlblYmyF0DLmu3rBF z^;RE<-YP%KL})rcq`Bn)p!#D)JnbqSxaOPlpS-F{6GXsZ2bb1~M4bE|m2GYpt~L4S z?PDrl+>6WOU9UDW_YC`NgJffPXg0~J;_^O7@V^n;G5 z^O8g5lpwCGYn|sBac2tPiM9nVY7I)1WX-zKHf5LJ;lW*hpT6-7^zY+&9JeWeR2PnS zMKlDT3NzZF%;`q}eBoxKvocqm%;|I_Z?d{p=hTNj(9JFu5jniy;k z8uD3)%xHG4+Q0B2(pc5#ebfN(lLR5Q-q3|9*GFQ7VL7${ZJ@+v9C+Z7#)OhfNbAHA z2Qvc+&3-bx^iperc{jDsn@{m4#)Z1IquqRba0L1+6?}|y0EVl~Ph)K80J5GK_i*S) z92ZxV!R2WvQDQ4hj-#rE{gpTPmD%4dO%4;`EP2Wr?yJXrMa`wX4Tv_qO<6tKyp;tp zN-vy66YeL#czt59*ke&_Q&Q`{A}lC#cCT9d7;lj3eX84aiJ?8;os_YkB|x}A`?$vv zO~Xu|+c_S^89A(XMXVoXsh2Q8DLL8mY*b&gLv@&jX9}lr4Jj^Uzv!6fw|mi#mgeLW z;|1N3II{F{32C&P-bCKsw-Gm-VBYFuR9R$2T2dUKV-t=Jc^VM#7d<;)`r==g=Zp?2 zJv-c3%9S0J*&5BkRG)irERi52jo<)?Fn?8>EfPEIxfr5Sa!pvcBD0db**4(No^Ep~ z(lSdldOG1$x3|}xVQ*eo01AA(UtNNeTs0zzjvv8szl?lWlYYoV z6ymk@R6WP&#-x|(VW9xFz-sqMTq2;a-X0OaaQw>J-$+P|mCo7?#Fklz&lF5yxROn~ zHqdmQYiO0c5=6V^u?N!%?NKM5Ex9ox8rB(a${cY#)!0xa)+l0NvT3_|R;35YxGcNf zV>MRGaYXXMTEsvBt^r!#72}{F!JuI4CMop5i!FVOj5ChU!WO4oEm`Jmx4R7+0n!7A z^V75L$}1@%7r_K4w4JW0V*0Hd9b5Z7P%w2VNe2%x70nS}gwW_w>6>YP82}Eq_2pbM ziKu%mf1#a(=-jwqQpQ+4N~!ez-0Rx&k!WzV2_gWXb+uY)bqj%)qV29|J*(T`p}4Jkx8uvCx)cfP zDbc1wx<~agDy_6O*XNPog76DR^aVd^j=!5j$dc>R=SKK1RG2SWP8!D_%C8MijwrA^ zO$OH&_YWNiQXbI{_s~GhZO-<$9Pc7Skn81yZDAH&A-cy9V1kkOpY!i{bEs@U`PXTM z9Q4mPd8O}^*tb}&W?$St0h+fa)MK#8FB6Pm*NHy94~N@a4Z*_9G}P~~4HlN3Z*r*Y zJ-8(suu|zK?u32F=UA5#G5$Vu*>+T>qRxhhqE-s*GHuXj_nLbGlcdo?iZeL=31GG| z#EBe^ISPE>GUb0JsQBl&E-=b~7CeuYX!Vvj1@YtfXE}l>?UbFYv3u@O3yGQspsza9l}ojt1Woq%LnXm=9@sWv)j1dE+pW z;0A2)xe9fKte7VEBV-cD+Hh`S0?(53$A)iM6(JQ_8!nP+uBPRK@4|I}^sVGSdARYN z)hXq@+ZgW+!&#-58GrO(jg^x%53`#Q6?8gd1-+Rbuu2_pOmI-MRq z^;*X({h6i8`6@%>sSAevS!>RpAL*xN`%mRH*$1{5!p(SSTVM912YQqX9~%jVx5oRi z?E(8X0mGoL9=&PP0NY=H2d^!u!mEW`k^z1^Js(5NN>D8ePM+lbxHbQTZd--KdXBP9 zL+yv>8vGjJtOjCu6%Ugs&C;8HGFGzN?8ob%`bx2(R@K=mLEAlJf59IV(FC0_Ew^n1 z=I5dZW%+l#4xD)QT~&DWP9_*Y|G?U-F8NP3;Nb_RYX7n(^-X92tWX=8IB=T$AFkdp zNV2Aj8f|;pwr$(iv~Al~wQaknZQHgrZQItg?!5DSaqkzmqJHeN&d!WHr+#F`&b8KN zc{`UU*Bv!HxHAbHhtORAJ$cO8JzgY%Y_(S8rmG( zqwrGU?3B}a7!WUjcz+WeZyx#HH)7pz*QrFYIX(!B@Uprq)eDFldvlDW z^=d06;OD=5A>e!mHUEAFWczyFTMm2)Zr!lBo;VY#dZwUf@LWiBwYS>nNpA{& zLxl4X4_6S+`>j?QmTN-kaF~BrE9=eqf-xOeH!I|sqFX6YE8l`Nt$?*-lhXZsC=$EX zo{!n8A*QE(C?T^0h$ZBmLOz{EKxO;?2#RkAh7a1E)RpsE-||(8O7*zja;|RzNy5s@ zctv(Mvr6D@1z^0#^0CxxfI&2|xnM)&y-C(Vp9D@dtxtJizuLH0Oh?6)COtW+Jc;X; zvm0J6_WqvJQ^5V~6LjntHv4*d9j>iiyGUbDXD`^fx^Z_0yi{6Bx9$hlRm>?}X;401 z-B~)xvEy{`J8vq)Dj?3BVymh%QtT$w24R3JTP8*qQ!XcgQ<<3h#jEtuUVLPmWcVa3 z6y-%%(&;juKU+{erahMRyaa>S#{(7L5afh@tpC^#m%3u9X+_;kdslebdB8Bg$?I*H z`Qjwuaw50^R6JX1HW&Nrw<5?`T4bm}BvBQE7Zm0w?keP(Mj$>$Bp)!};%a7E9vw|N z=ew=%#A05=mPo%J^1pp#(;ILKl0FW-IR_8NiyX1a-?t`ji{h#LX+PVQa>%-;Oe!>do5{i)Xt@Xme@X$Mnf zl$LU!nJ?oo0ezsZ0Gey@tXBmJeOyIwfg{0rh`%{~$<;yZ4o)e-xXF@H0FU{53K+N!>)jbD8K&@nbfU_0$wh?gS;dH~vzjmg(Fc#b5T=m92<6Z9O>aT(fEl zToj=JfR)W6f;UcJi5=`ol4$KhJ!a|FqT@a_5$CUNKz-Dxf9>tZlM+M>sUX0Pkq=|k z?USIN9sBL!{IP%eTDI=5zD0LACT$w_@pdu{_!Rgb;br2j?@tsl5Kye^U;l&u+b>xi z=>PiQ|BanI4O3ZE{ue}jawz}1 zxA)0W_a9R-8GQ40?_^sOAAobMQLT&=W_Y)@k%baNd7%u>l8P41oXdQ8lv3S zRR1C=J8p&lCe3!?j;8;I(G+qo{L5>p<~H~@XRGlVHxlUoH+$qJH|dXmm-T1dOaM7& zYzf5Bn>Vzj+io>XXJ}Hu{Rj*=6s6HPTP@oX>~$iB%<6wE!SC zBtMV_Y;{XNXXRFaLStsjH2FDp7Qi}|*p!qiG9VaUOoJj?U67~~*_61D5)&_bpY8mZ zjjs08r%}aK&0&46ts}prpQfX12JHC_9j* zfBs@=B)E}T-8}4B&`&ONLjW`p^w2(&MnsVTV%K%p3g}+WO`ixy;r2;3B_}9#!DPS# z6gfz|JCi8MYXzd0hPa$SGL}|p7N&^ zXnyj!*@P<{897oBxVQ{+Rv>?7bflpy%m4c7eW3na&fwYun zBA+m?0qFNb*w5@;H9&s$#laDrt5-oHgW{DgiJLGH8&aexRe%+67iOWbbY=_R^D18! z{RInteO$MV72K!iEBiswg`ZW9wUW;XIN^4!z*m6`?BF57)F+@Dxf0bLDl6hy1;~oX z^Vws)eUAaP*UjCvAH7!vp-=O3SA|OFpK@UMZ+nh%hn3=bRua53#!y5RiDE91rSNHq z2EM%YVaQP_@_;3aE!^MTdmBv+j!HTLAeO{wU>Z$8+{9SE1){w=Gv{u~m)(merV^A16%N?KyriUm~ARd>Yre4uu3I|oinMi2Rrcxgd2V9&C$*{0FZ2k$7SlV%T@OqTjE>{@PNnzNy)?YxZJT} z>uJU=WR$dsuS;9JyPQBUx+nNT<&fVF%>|q(*Pf8$4!D_jHZFU%G=D~aHtsLB{>YVI zO}k0ht6E(1yDRlRnAqv7%M~xHoVReHxb63_0nEUZ;Ti?RQNDI6SCd^BLgqvF9x@ z-=#3$PzPgpLO0kP?JeqN^(3y_-Vou;T9FIfc~lj;t)0I3xQhcMf{PP`VLvgsBu_JB6$+26iI5BwSQZ5--t@%OV@mB9(77f@jwoZ85Vb;1B2w1a zPxl%WkNU(10Pg=1xrU1;lhL1fa1l_jAOIEROZ)nFuCMLirlO@f7Q>_wW~lIUDkV@( zC4G7A(M7ibgN%YP;rap1H1rdy6pgeM$^QA(Ev2%!WV8b9oea<8|tPy2A z5g{hN`w24cxFo-_B9Ys4w%8MJ!$&j2;oGe2h^d^;0i42^eDg2?0_8Y1F<-^XcOM3M zLg6{-0YHF?@qo1BF@Y_pMwE4t z9w&-T3zw^%IdwbPxb*cT{5C`5k*{5H3?CWx%dsR=T-mtpKzfY;0Uqf+NZIUxv>Lvf ztkkbez?L^n>h;H&c=}P67PnGkTpXwy7_Wf**Gk^RWO^^A!>aYqAhiS^rI^o$Cgk^% z@`!81X^>YY5334+q4N00ND^H!8-YCerL4*@KWOt9a4P~=*Yy3eh0s&H%Pg2m zKxCm}R;9e{b*Zhnbkd+cx_ZerRVOQe`A1>!6f{?27ZOjT)K}?%aW5EeV@I~lS;jJ? z#E=dyEfKS8VY>KC#4B)^4LxEi;iwd5yZRDWiojmobn_tD>IWho^Y9Q>nf~rvvsXUW zW5!MPn?v|9^`4j9h1AMaUbXL|i(9`9fQEVBihkU~J;tfmicM>4X2$9f{yJsif%V>g zl_kPR6xkR{=>}v6isML#Sd<5(svUPCi0@$>u0O;pthqRb1%twfED?i+-X^!9lcJ6I z;1`<#J)YL61pl9dQ zjW7Sn+m_y0@>(W4;UjZ#aZ&ar$??={IxM|7E2;=J%iiRWywG|f?km{H9kgObcCRr0zkxP_fSxN;wrmO+B)>owmxkRi_%sN>cAeOwyBVtku z;Ipgb81VB*PA-Qgv#Z!~%9SJf7$h2f3fk!m^4gA-WqZ$S2SSJ2 zP64$gjltP>6{s@e6evB4^|jH^Ny?I#X?9Er2HG8%y76jIVqaXH>3G2hCQW)kWfE?5 zPq@l()#DUO*Am5>UScX2Fc6GlBr;tb+dnvsdpWD#X~)v4#^YMn@{$3MUR?7sf!m?% z{ur^*JBhzV&DZYw$4tgsQpUra&O=h>)jR=T=^;rm|Dk!8Xqo_AxR;byJhvj!feW(J z8I9NzRS5xWXA3_@B7tFvAbKifXW-68y6~9TA~+AijbV_%?-#)f;N$=YTdb#*yK*x1 zgx!3+RLghXb2CwI>vsVI&JlD74&MD2u4CwdM?P-;ZKY22a>N#n>5;*%(MOMP9NG!Z z;x>)@C-LfQaF(Iib&gTf!~Qa>mw zZOB&?U%AronO_=-*+H%?PiOLaoHg*Hxr;uf4*SW#*>m_ zB)?kj5k8F#(_!hp8~=pS#YVtchD_blh7HHwSh#KBA^cG*0nm*z{=is%ymoEvXm~cF zFfG!-lamsyrR;%8SGQ=ex&@{K9hsmIM=Ojr;18-u9tKg zoEMc{_x|aEIP%^bGDRe0a$oUlGg(zR?HYNsB;2SB0wZk)$`lez1YD;gHW!BC0L$Lc zI0fAS7RL}v)m9ZW5w$u)kMYDSF4oe?-Xn#h>(cAy20&AK-WYbNBA>$AjDDHFnNMr~ zqdz&J34~G=?ogQ;VaS|Z(e7-T7@nGM~;ee5ZpZ05XazLDFUyuwxT?BovfI#r=!?Zdg2B)_BC|- zLg}Srshd892YN>;ZNku@Rz?*Ot<7Gr5#ZqM6>@b11)iy@u+X^`<9r~64(Oy0x59X#SO-Rd(AI>7*qqu`27EPe z+MFK*EJxIK=*7x0BHV9jn?s{<)=~+xv_VI0vu1%2zvdh;cWu;knAn9aB>*ZKD~8dI zB~y5-OPcdy^*HqFrBe)!L?zE@g5}K)Lh5!=&=rL!H;#NXtd;5!FD(`d5?L_2tO}g| zoq4DNP~Eo-Ru9|S^-s%g2m8K9gVBZvipib?X3P@Fa>?UM5;IDb_uI)6xqW|&|Grl^O7Y+?5y`)i zsbF0`d&-lMQ{GLaX@1KtLyRNLdrVkiA{%!5^oq)vOjZ9Dl>@XD2Pru1sYTVjn+wsE zXND(s8&GLJ&PLL&Ywz|0NDhhKB1IrErdIMvkccjMN)>U!;5Qwsgidtw zNuH&Z%qe>qG54H)-D5hA!KI*!$b3?}$$gHMLxDCoh-k%ub+Af?Wzl#el8QMnL#*9oqwomion!tM#9w z*S44QxXnzxEv2w7=+b1GRHkBF>wUd?*q|XpOkP1-@CjAhog6={;NCFBiD; zBmhwsdO&Y}1+N6=%>tOC@yI@~Zv=5=Co!s1o;L&r9 zwnQypmEaKmL@`}qcASo^AnBI87oD`W@SJ_cuxI6>dSv~H7nZY72lK*#pW6@cHF~%9 zmesxE#A-g}Fm&li4^f-Z9Wsc!$>Jlvn{H~8Cp zG<_@?Ej=#}H@AC(M@K_Y#}EAX%|wzrqy(2RLd~M}sHwZ@06&3VK^y2P0n_lK&+V5- z0^I;mSpHKdKPQ*f- zKcEH^<@3~|*4^Q8lDOe7xjMp%B2Dv&QWtc$;O#=C(JX)Cxj~{uUI2P{H0ma|QWOPI zk|Z*eC@`n`YQYW_&0pKCsS=be0Y2x)HGq!XK|K;~pqOyQt^vJZ*va|ofiCCgn@!<^ zr3-JV9qMA4FR|Z}CqCIO!6PGmF;x*X2Vka9Yf-7Ab-Y?(`mF# zSkJlBifswlTh+9<4WAjFx=*nUOij&%>nu^f5~SLyQHkA<2+S~o1Ha=rBwY_niP1X1!GoGxmMVv;}dE?@1Me*3K9-I?g_+SyY;Yp!+;PG zVbUOn8z>M&-r^u086^K*OS}b!C?N3Jc}(1w*uU4~nB8A`H@CY`{XXGvaC_`Rf`MTw z@4ZiP5CSfLM3+-0#W-X$(P(S}m%LP{o3}_g1wWlTGQ?ckG?TYQ)LE~B2X|~sph!AY ziKM{<-p5ZfS)DBm7cO&mu{okQ0qHys?b(Jrt1)%&gq(8$3=Jt_A`^X|Fi58ukq>!j(g=m9`YB!6P?0XfM~qZOp_!AB0kOhc5{mt? zCYvXoMCjoP(zMbKFk;|5PW2L_to05&ymVxkA0pK5%GR6HC7>zoN z)@P+nHYS)7-&I*=_6a(~%y#NbuqIZ?KXUdNhD!9DSPnMnmrg{*v=I6-crMm)mE``l z79BAmiQ6UI6%m%m9~+^!%X4@vi7_=|Eb0v1pE89-PdDS!@;nig%9%@_@T$h091#+ayJ<6`d1w6AvNIofPnzT0)9 zww@^Fz0D_P!DH^%8XHR2$@%s{xW)Ko&eUqOYN77{o5ZosgamxP7&o322LC=)^yc9B z;CKM#W{vou25@hOAMer5GWi)n^5WJirgr^-zM&7+zT2Q*eYlU_5F5>xS8^HAhjz_9 z)}G8_gRwP((Tb@P@BH&5ylAaz>Rc>mQd&HtCr((rW@@&wp>TXW{T>S4JNsVMzE{IZ zJjz|F?Zf>Idj+Fbd6ad@4$_b15cQXst3SaVx{z0X2Owu6tHs?Pt=yV5UwB3?#Y&-7 z`3S5LUMKq`h4#}`TYTl*&B1Psc>?{&+wuhd+HE%xdvJ^st7^HKzR;ndiSB9##ZI3{ zVTi~2#}j|O?Y)(6%`*Jbgqn3oxED@W?}|#6+)I#V)4FQJCn9&;wCkSlc*%wIfOOL% zy-_xq0>A)jnr*imcCc*P9;ip`>?VS&R~BO)fI-BC_~~|$irWWMPH+;v2O7Kc8NDZ* z=Fg%wols%yqKlybA6ix+x?(GMWxIHRYH8<=L}qrDZaRa580GEP^+cn|y`6s4SDWKv zEIenlz@j_gJ13SraP$FL`|zm$NaUbZs4(Ed2$)g84yHkp7Dnaf6tM{4<(dt(K*=3# zDq1Owq8w$3?{}ZR3P=x(L|hBcDB)_A=zq?8=j9}5TFNa<)pHeWhouG4Ir$#L$Vx`I zbw>*E_t_tg;mI|l}V|gFhJVnHls!VTs4qrtNNU|gu=+;a-&^9n2l#F zk2I7tsDHxFrAn66G{6!)Gq8iCMYC}YC=L#%1NseFvk~YsT@r)mPt)FxSEnqv4*vUx z5qn?mCN28d+G-$yoE43e8_NZo1Z#ysKdz&TO-rxV>Q9(CF3nmc?MqiL@95?1L9WVapl?(SxnhWET98FCS8oy z?~qdELolg#*in^%C7PfhwCbP=pNwC0Jas^2|LT??jNd7hgMR1kfsF*%62=5S`EioS zS>`n@y)k!|4F$B@Q!O6*YcK$+*83{7<zn^rC3%_NSPA%L_7!p{l=4l6@-Y#1t!R0<#ETxXsX4f(BAYB0YBSaoN@2pwt-z&#AG#XGOVr+CXhvmg z3^l$I7~ocJkb@XIDIN)afHyy$5g`qRn;nhv1w0#fN(o)K(bX#GvB0xkt+}2JGGN10Cr6{5+SNcO8$`r|2a_8*rurgDb1aB`bEox#k9h0S7B z1CEtc9~sZvnx9-0N0b%T57CZD@jub-w)0+W$BWC-vuY7jr=dY%4@ClZ$GFaiC)sN&pESu|cch+^sA2 zTb5Oe9I`~%q8KPLT~$1!Ign(i?<7B9D)R-U$w1gt{&w?sv=h^#2gf4%84}$;SFf|H z4c$t>^JP1^0Jxu8T8P`Qj9clL_5nNDfyU`I$SN6{gb5A)YDs-_Z)vG)cxsLdRZ9v3 zK;w}u$vE%P+pSzDp%>wyX}?<}hvr->VH-}dh1>o;CosX#75r$!_{(Y1e}N!sX?!Zu z9vJy)noiq9Z9vMT$uQA0x7TB3*gCzDW6X|o3avr2{|IF8vNb!(!5Zlk7dQ@S!~AbKk&^oH?sL~4F@ zY?%A@)_;>jc=Rsx{0ASc&S90{Lo8ZmS{AHE=COlkvyhjCKhOmdA`mswPi!uzM^xHK z3g!8tplG$}uo#5yxIm#HzLUc_#LdO7Hs1{9c#o64I^fRT-i|n6C0DrUi=OgjMRnU#r&sz(7nT)zk8s*v^tLcyaGum1s>eSaHm!ieLL4}n z8lv}y?K*tAe=eo>)D!$jJ&qA;033%YT_6)Kq{=grSyav;(r2R~h8}bh6s13HmT0)0 zGrDX+;<@Kerj*G~K8(`j-g+`UfE_PmYLjbKNU%j@Zxgs0EvaaXLx{G2I2!RKR+Mho z6OhfBOo#d4p(?a7+*(OrAXDhI#dvi6mzHsK#A>5>l|$;*b~rHaS|J> z?aHPw3fm$819aNVe|U^kI~8>9ixQSx_IhG<=wh<2o?Uys!GEwB-Br^Mz)F2i%#6;S zrSKH287!Yp0GEzlnY?Cc(j`{IGu&s#LpG!p0$H=!Q8el4QZr?$R1%9 zt_%h@NH_+QEGJ{a2YVYF0;$Ow-0hN~7Wb=aSTDv4h?1$86!oXB)TRkKLEX>2@F+W! z4VA}FNab2T^Nv)7wuN<0K+oCG0RY|gt_vpi172drD6<3|sOAPmhp5GGiv#E}a5y^d)I zP-t=m_Vq=S8t196BCM^f$i?tHI+iFMV7ITO8IjJt&%IeN#|p;5=v+^;+4KL3T*C#| z>7b&A|6GaQx{FrO#Z9;^M8Qh%n$+qTvhM_|w&6N(ogIC}OP8!8&P$Fs~zyfI*@VX(|v_cS}|pJgRW@lnGZQQMs;&3Pa>db}fD|D2+}2c_L(j zGgF8G>dTEljMH-dfh+hiuI4AdLMdQ=+&cTgy_}Qr9dyp^Zf1l1I^X7I?stlNTL#Rd zx}=-8qSvss2C{^*#*GY##z807;7E+kk;(A1a#(29i-oo-K_)iI^5=+GQVFLwYk zh4`}Zrya+^G3PH4Lahr{Xuj%s1a+51^+qIcY|EFMf$?`f2?%DHy5-nxW8Iz)#wopL zN_l1u62K|0%YK{AmNbU7p+jz+iLmsGzkw)QtvrKFr#Bgk7Hru^g~T=A%D*-r_7!iA z98fg^u&It3&d5I;4=%@XizqY>g!c52rau=-I3NnzPm$cino30SagZBvatmD4pCWu^ z#I6lXF3vBQu>UZ%c69?ZXtQ>qGHjkD*C&O`b2-=qFzrg%azgnG4!?4LeCQzqyQ}RY zODv|p+kQW~+@yWIy?^a}-EH_ifeumQ;X(ia?6SKCGjOaJM@XI&Qx_VC2+r#17NrER z!(qBPPC&Q^xofK=7?+^xLYRsOe!RavXYi36T^WMZ=srKwB{qzo*G)@v9GcTUt*?E^ z3>kZl4!|;S4W21&6BzgH7spxK#R%b}>xiG>XixmiWXxe?5B<1Q4WOi8Wfi1UPg#M8Fgyv-)5WRpvs4$enVM-l$Nu)+ zBzSpqG;r@6doO5a*I zQm&OK-FZ%Rp($59^xY5xPCb}P zeurxdm6Onw6gA2)*H$^mrm&OPO<@M0&ee(O#P`{x8-YdG5A|$fPKwL~L@?7#B^wsb zdXkvtrh$=hB7%-AEXkEjOrv$u7Vkh~ZbWLs2FZnNa}9Yg;5#!|NQJN+ghuZr=B>!< z;YS{PxKpVDit50dr*4F&$|^c=I1MJyKi0}Bnx_B{=c#5Q6Npp5 znElP->?QQs`mu4|vOk95WGc1ty<+qD`o_CvA%T;LS#=PriJBCynM`WDX#1U)Gy1S~%4m1yAX$+An7wSl( zcD1K0H4Z-xZ!fpD^MA;fb63;{MOK<+4@4CxQ6aElT-*WNgk_1bh zmUAO^D$C#Tz>=qO^i@y;$~OIuT7Fq+wkyl4Jr8{}hS0@}%ny-vs-^M|Qh?+?4^?Du zUOb7)yM`Lb`{UvD3Va{DUVcn(+xv26nu=OT=ixH{ua5g)8Fx;4RepKFxpg4@mcHj| z30c2FrVHkJQ|yuR6@IflD$dNJ-5D*dqLQG$s#A4#XI<|)}YLv2X*J?HBx1y6v>=ZR=S-|y7E6sBuyMCpytVDCPUfpNc>>+*f=M!>iU9EGaJ{`^()Ll%9V<+2i@ z;@Y3BbTq|xfL1GN6IYlqc(79s#5`uH6H<8k;LB$lj6g*#Gm=GP`y~t%ni;%nz!S}d zN0ZZAn8o;OHzyjGM3MX(WL3KmBmJ)mh`U=D8mo>}@{lSI53W{!SsvkK11+ZKu$YG@ z{j$w$`nm#$!Pq0wEyGhU*}A7f%INsVR_Z?ZxEC)-fJATh%T71XhzXfX0G=rlDx}I9 zA-*0xKEsQmu3B=h!V0F9bv_$gWo&AnbWArDVaVD}#b=hTV0(1`qCg442ExkYZ;ys0 z1=@VahE*Mrqo|Q96uk`8AFC4QHq8lvVJ~ToZl?4C*qaU{(KXou<^i*k99e&$V{qNi zd9qW(0ij_EyKWu67TB+QNJy%72_%{@@M~I*{r83a-5e^7FrV-@!#2Lz9T0ppsgCu> zb((%nZ=af{8cb=x;buwCS`HSuKeBhH(|{lYdnv#N^S+N`edD~}RrCAWE0m|ZRV&;C zgP8Z(Q!qTWObVEv!eWAnr1Ylk##K>cEe;nw0E3&5e8LVC5e3oIFy0Ra^qAEHG zfU78NVx(OhlFi+H@gcD|AZW5X4u@P1QUwtGD}qIv$wp2jCu@zf_SxItHFL0EN(xwnW!S!vT}}xIZA*uS zJ*Xnfgfqq-F7l_<~`0W_2y1k<~kugY`^k; zo@4tm4a4>rS!-4lZ`#9>Fu^Q99t1a_cTry@iEw}2o=H5y;!Pua&9IWlOZxqpdES1-$zL7|#A*Poy1hkH2FlaYX_LJgFGYT`2mB9bhiiDC1QRykY%oc9u zoSX4set5X`Bv1o05#387?&%LG>50C8WxXc@|SID(#0 z84Z6;={yD#IsQe_zVl#{;k<@`Bg}Z;s_^cAwwATwCzfTFm~(=~GaDJh2sl+K>mc$m z&8Dk4J5^o}QjAqN`N7-{btHoM)>)ojHYk(;$9C27%9JstId`c7 zW+>dnDENw6=f~E}ly-?j2fz>A_v37TOI+?)sCXOQ8SCfNlp zJv{Sa+rLZwg2KTlolE~2RdD$wTEw_k{w&!hY8MByiEH#3?bH(W3m_%2c_Y()*0=pe zVcbvy#8Bv`y@hefgNf!0@zZ<;xhl%=~O-EyeYU3H8nTk8V9 z77x;FhTz!z*CFpT?N_z{*u!b#FXZINW8~<2nAl>GIdqmuGJpE_US6o8=|{CqL&lXO z`jKn4^!4L&tixzaAwWi@8px8%<#rS+Ix9{K z=LqKQ-HbVYg59=`wk=kMWfkA;>nat;0?j@EH^y~fBFPRAC4fs?>=JN&)5}FZTB~2H zBVu0pU}OEBkrCN=>vAj7JYcz(fAhzFT#}oH;lm$G7U`gzu|qXTrz?I0_yygrR}$*8 z!R|%fFdt15R^v9hN&%QKmIc>Ihdd9H{fvfDqk4&2MzPvtK|w{Aa*uYeP<5z3Tl{eZ z!JNr(6Ed_C4Inkin*6x2L6Cig#~ri-i5s^$>1yEaV$e)nPWz*IKzuZ1&txLD1RHfX z0x5h!Y$D@;8Q0sTnW`S9O|MzgezR`8|M z);+V^vX2X=Px3KmA5`s19Qquuhn#5sj^TIf7ZD437Qn$OJsj`aD!=d|o_C^WtgS)k8h*T<%)3Y|=1&8=<~g%KbHpFxG*-De!Tg#bDb$8;NW7)Ab}p_W;{3;S zf<4IV+?ErDJn`bm?Tijud zQ`nJd;ho0+TE8Qg^*-LgZ&Ne^t+!r~owV-k7_?78;tMydFhZ@t%CvNN=Y<|v8l7Be zd&*fKKeSVp}z3f zsW3I|wpCVN>13cuaQwqc6%!3>XF*!#Vx<*7x4ak*ZW2AKUO|@n0d>OzefAexc|p!9|{Nx3JU12 z{;Aa&i-+kyO;jl%&-Z`M_~oWN^8e|${@C)Q3;mNhrPT7Q{Fi6n%CkuP4-;GGk^3(% zWuIr1>mR0%%WM6gY-*Z}*X=*Om$(Km$bVyH^m#X_|4E?|29;4;`6GFc{?lENr|_;& z{O?9fH?PUR+%%+iEYw!-A>MF-e-lH1@fG|h2CIbTDj(eaYR z$Q%_~^Ty`!eDe~C0ea{L!8w`~nQvbl)FU?1$Y9GOQlz{G*_Vw^cK)Tdv)a_H*3~I{ zJ-Uq^>-`e@)T=*iHRlfqY%})1t#w+`I98tCdij^Iyenp{p_QilW{WCj&zp2;Gr!ce z>;cE0Uf#=SHMOr5MaA$nW0&1O8h*LO69twW!VHCH2p1HEnzLT4Ea@&(UKO4{1U|6k zEW_@n=`V;a&W5#q&6UKWFFmXFR{0gYu;%r9KG8I{{c1dak1Z3Z?CCs)^yzxaGVR&p zc@vCF8{9wN@_ouPceOlracnGjnq&vS^a6~(IeJF->=$dwH|(T+>4!CQEaf}%KmqR&NHOsNPNt0y z99s(sWyQ1w^HMVO%DfU%9-Uu`umHGa2m56QcbLS%OOIqb(~d-37Q#7(lM4~mHr0{I ziFFpvk6J!Pu&&2hT!x1(PLF`F^BjO4kS=5gD?~yf%oxFdBs#iLPfxCa>%QD%!fL(9 zd26!SE^=_zUSsbQjX}E0`(M?*OC)$J@XeeD+y_vOURgEa{Wgk*3FhFZLI;!x)x6~* zm(rEmDRC2W+dp9>dph$j9IHsJgCX~_&ufrkc@91K*^kQEH6iANpaVOdkT`Xjuouh@K!Ew1z8W8kkV zpq_-k2j{yt3w)ZNwiMP?WDfW#7W;GoXEG8a4Nd1%H&TEh-%#p;O(Or>ZU&C8>l#aF zIOv{a3Z)7LzTPR($|Q3|q3I7Fl<0v`5-7kL5KPp3Gv7niF8SFtKw7ItKi5 z6ehJLxL`F(OOjgAjZoSjXrVp^aXXQf>gYaWre@-Adxj>J9~!eMbH)arDpg1M8Z>Fm zP~!KDsKFB!f)JIF3S>BjDM#gVn$_fSD79&Lssi61lY0<6I&3;FTF~rXxWZ%u9t$jG z-P9`n5@gfH;`iw;j%9%GLV}n(YEI~+tINvRP|Oxy!z#wlu-VIMsqfMEqpu2-w~>I9 z1K{|omfsL4F2}$Vpp|SqA!`yYY@H8lAXQEdJ&dvc%wwQd=$j&;e-F4H~c)6W91=Zo9++c!sv6TH2~ zn8I|r=#s&hsA3B^67_69(RIIg` z36H$fD_EapO&c1fu}A9fq{>O%tEuI<8;`Gw(1dfzt4%$?tIeMG0BBi#*RY2ma2>OQ z5V&q)!&;g_b`++OU}2*elsxdzxIWB{uFodxgAW5wt}1MYWus- z3x3~e`&Bj-ozv6#&gjI2E`@bK*VTqucjmz~j?P@q@N(_8H1N66GXgM+X7|Tgp1pq8 z>t|S+{rSd5?+02)X%)f1n8DnDUj3%wCF%oOErRw z1}J=T+4*p!>dsy~bUdiFdUH?`&cv~92A=dRMnWW;9tbYV`{c@dQH!6<5F z@+9#1ERye9p+{jme|YrR+`7Bma{QbbFS=5p%)0*WbNg&uS?7LU>atJBX*}~N)=J?{ zi+sLQG>^eK`ePQeTL5!_EH@6C(`TPg)(7%2leGn|hWUKsY`y=zW zsjV<*j6(RJ)At!b*o;}C*9MUvckx=v0Y>{NM*HR9Om|{+`M1hCYcqQRbY;m#r4}jXKE}NF zo#_KH(qwpM062i7AX)s|R^HoK1tR!b^sOwPdm44B@)t3%Dq;F~<0Qz8AxZfiJcsEU zzDXThsB3`+Hg0m2Ac;kUu$T3-_A zIu}(?gzqYFtedSD0}4d^sHa{ka8fcB91a0sbGAY%loB+_C`yTV#ww7wI}ecgX}6ggT@c*)eor|WQif!Ihi!O4miI5)M^*KuX4+Pkjkrye!oYZo_C5&BB3o?g3w+b1fWWEjL=gXN@WX?1xC%rxvKp9sjrrg z5oI&ai<>2Fv5UUgaeQK2VgxToEb~Z_%3C2BH4u^*W95NyM=YS)Hjg0>vd-+?Y(exi<1yrkX-njr2r1VZvrsGjcX=n zhz2UR`PzTUkeCvGT421Qoe21H({%?&3&6L*yFA;uFna=-hv9S4Hy3smhsfRHrzu%% zH7N>PU3OdKH-Gygx$Wv76pzE}pAx^MZBmGqp#=U;zlnH&#F|3Jwp66FkZm>p5kBLm zHoH1iD?~_pO)7QQ^aK<~r`J^({2dhf9k0pbA203Q7BMpzRc&CIotgf;`7<*Op^pRC zv}7{pHcQ-}uGVA8s`i3tWq{`6_JL5M$BVZTm`egdj@DuB4H9ScWO8uT{nWjtO_V%6 z%V!x^+*;tor^)CcfsXSx1!tGGBfIB=Wpfu-l*C_Vy6#3w=q`Za-l)qZ&dHU+QDd{y z84orBNzXh_!?;xnHq)wGZ&4`@J5lmTLDvRWmis#4C42+HY7+r>kgCyV>@cMU(ZpRd zoQVbsdrTY}pEf{u*{C~%umSLDCtNW4q&hK88^0ETtLI~KP|WWXuar5xCz;%3h%osC zeCm_QJg&-n6A$Qt83a65xIlwE|FMm{N3XFO#9g_IMxpcGki(8(1v?I|-$!sIE)+G* zi*>yqgM@)yjL)qyHpAEH@830i367W3m|0aLu`Jq_cF1W8)7 z0tZp%>c#*%aBIg%M3Bl=B8t728&cm%gX=W`1xv@rRsodewvXG$55)1Kuh2K^ye~%p z+;loK+qY9;b+x0lzPdI-Cn#|__WLRF3gujE@&tJZt-ALJ--7jUy+fBgJ8UnRkW|0AJ+AG`zbZj7d$4mE! z28;M;7X!qR-*8E8`#k70Bzc*t zXNa!J&YK7=B)x`HEE)D2rxrCddEEshl~e*&b(P=D(Z=*2o0U!46mMxLXSHa&B08XQkT~(TAFA(>^&5S_h|@;T`!hR+<-J zP?x9qu@v@HWD*O-tR6~cL#bQw8b8Ta=m}i{ady0QYZnU!b{aTDo;OjB&aI~ju=ST@*r-=!44!upxsOfv)Piq!$6Jzlm{{e;&D&EVoKjEQi);cR&pNeE}F7suI2} zr*2|5Xc<2GM6LC6ZD2P%nNR*v=|Kk(#ut#9&c4$nG*r(Ylx-kY%NA73BdqU%Nqw zL3zy;5dC@dJ7`3yr8GucgVQ2XZ_9bJH0%b_9j+Ph-J4>Rv!qb)^R zonGgIehc6Ea>xga*Xq3HJ9a+cz$YQ)msD5hgJFx&huR?pf9wP$+v`|sKzfTlHWbCu zs66|%k`n(5sZnrs{UIEy8B24E@c(~xE2_C%LSH2277LoXYz0DIPA3=WB>QnYi&IN! z{pj$Vkn`iSF+rk;kR1b&i$;Oku2oEe@4KJ6aS|$UQN8$+2T)zM;0#Hr|G`^ZrQmZI z)J`>ZE6x#azPM5DwIf|8;d+qQ+zlIEW`bW9Xg^j6_UMrsACormtjk%!fJfz4yb+8cplU%$GT*;BBk|;0Cbr@nlX7$++5v^2pdFm%#sQjM8E|CQ5HQ5hM@D!!r#0!E z-JIfTNMXtSGh5Ff(RrV0VL3Oz9Py@zC)KkVa=|x(27q8f#ispdwO``$rg<8$B`k)v zoK%UWVy_MSqug(}aMn?Db6e|klg4IPx*@11O&I$$ev>>ws^+xLTyNe~)wjoM+^A>8 zVhvt|m9%l?x+{0q@=(D3(Gz|hZC=MxhMPoZ9$Lb#V$l0u>+6aCOPbH?+3odYu7LJ( zC3R3A6)?pW=y`lVchgV!k{QPU%y9TkjC2Zoj-<8=%0#zY!-e$CK5c`Ql<9t|Wm0kT zmTkl{A-uNRm}IcmyZ|dH^Mm!pR9UI&s${O+=MC<;yw4(y^figksV=%B*K_Q$Uc)U% zk~`*`4f2!Z%t4i6NeQGZy*~zw2@9K%RUCN^0!H1jMCnWC777KE%lYuy1%aGhrwZ%H z-G3QGvE<2G-(KJ$9`#WioGP_or0ZSnahvFnV@)m$A81U{JjSrq1Iw^R zNqdRq!Om48XiYc#q2of>=nF+gAJ6W4&$!Z9QBps7aUsH3P*4}VrAU|KvgF)ka`p1Q z0~AiFP7bzQKO9tCZ0gjsSuGEQ-sTrU)o`|GDT~ub@Dky~4!DpglHg+dDX*^4G;vCp zV;2%MGsHoTm@lqd&YjjdUJO&*M>i2Uz{@0OJ&D)rM<6>|Y(cwOZr#YoVnH9w>1?zk zuZ%x*vg_jHOSRBh2ppuQL$^fG0jrZ_0*)iIb}1w4eu#%nI4!7h>8>7qOa?9-B&TDc z^9{(Csb>7>G?g&n8N?;W7hE3T3yywOvfHLS*YAGzrLZD?-1V7y;ds(V%J003El^2* zNdJnYE%1hGM32_Ivs&pyyHi@`hhq0*GE3M*?%;6hyHAf66Tq?P&T5ItQ}fY72c*bN zPWKMfd*cqF;$<0U$l*X`Y4Jn$S?==GZSdCgUAo)Y-H5L7V*TQ~%0Ey2+QVAZDn;n3 zZi$}T>W>n3wv}|yT~m39c~huiJJjK?N#pX01~%5;aE0CPj)?9M)OqyU$VxS7S&T&j zXOnqF!`iG&{xm&=7zXt(jj8t{=>!`jPAaQW- z7_A`f8C^??hGY0aTZYlf;^}_25w1EKkv(mU8TC8)Swn)`jz6UZ)Wt~`ldC<*kbSbt z`&Wq3aZ(1X!vR#-y-gfXfiK(xhU}@`k944(fb_nrUby#guOPZX?q0+hK0tw|Z(g2N z=&|^OERtFUe|sDwA<`me@2tGKYK)sFuE+5R?Xbi$DDI8O(munxJlO3IfzgE;r~r1W zZ^q`gHfMT@n4xToyss3Nb@!#*zXyV_~PsYxeLBJE=sqQJW3Y zpj1lWtEJ;-kiKE))5~2ZipDh|^ zNipAwZh^?=bSBu=jE=hlNfK9^oLG(pJ<1YT*swEqbJhFrZJjht9{_<|328s(OSRK^ zXmwosG)lYATgWH9HI6&E%HkmSA|XpmxlGh&_AXl7X%c|7B7oqJVf^w_+8rA60S>VM z1i33czzF14(P)i0e*U%|&6Vu%Zz2)+rnuwMk94GqB3?!si*@c=Ai%wm7!87@XNL_ZMC z$@EPr*(y_gv~ZOXiubZF2ACiVaOK>+Bp9hdhX~`PUR(?RAIpgj%XAC0aG8PC?vZw& z=U_#dK}4*AG6Mb3quCbUkHYfE3>F9-#wZR7e8*dN&^)pQ?gNMVpm0T~&Bb;I)5Uu; z=ahNq(^(wUxBz*Qw`iBa1nv#lpkZ;Cyw;b=SU1-oA?yRgf{m1EbrmF*F@O z&>%T#JgKKEA+5WX7ZA>DjAbdh3zL_sGu$l+TV6*qU7Xty`LdXsDWqOhtcHg37@|w5 zh2GGND0ma^*5mIC-ZRh){Nn_Lj?}!zeUYU6lYr-nw@>etyU`i`m=QGG@81?EpnC?1 z%F-RWE*`VzqOY>yI#U9+YKurMu_h)qGxIHi>`#R2 zEp^GjrMfV2QjTK#Pr)1$Fe+az5rVDq;#IBe&sJ12SX}kiG$?h+TnI8e39KYS{oYTB zP(WQXLlDz}IPsN10?DUqjIiOUbPzA$OJ_|CPOcf5Coi3znT2Z0O2HTICCW3u^yll# zaly?qW%N*&qqozNa_>osZIXgEy{=MZzHawNfQBg9@(|^?EC@=0(P;dht6W$D)1hdX z(MkkU7LHPJAt9k_d{k)lCGy!Tsx#XwAwUg!ZYim+q>U;cV_1Eg9kPjnGh4Uwla@#m z`z#106|AI9(ml|(NidfQu5!BvAm93%o-sqagPA?$hNMdc>%cfZ(#Z9M z!WKl9U!Lx-v;o8Ot1tm_H<=M{5}d}mrF&I3O0i{v;h@>a*4)wh^u@&Bv2isRoJdl& zS_!7Au?gaX_{##4j;gm=sf$vH4=`9E#MNergm7q>gemaTMis_{_r_$=W4&jZATRLi zo6em3sWV{)rNAY%V-_t>%QKD$a|{pEEe~*9F1)n5g_wDyxq)y12Iw~WmHjOh!BHlL zK~+ni{CMzRs~uzgUA-O1fElqHe77fAJk}%0XR-)bmK2Mx&j$IVKDV&oh2}ql@sXk`Z*ER+4(Cp4usZ7 zfT$59P888u5A2~14pY#RTG;u;WX1Nj6mIkxi`1a0zTnRf%!2B{EqEN~7rPC6?oPT? zR>lxb5GJT(Ya(Ydk7t7V6F~ZDzVy_fm6d>* z-bjp?I+!;H_78I!r79wwM!aEPbuORgO2wu;CNm*zUxEP;o$jRzTvWJ&^_R3=CMyz- zpnGdzUseG-OlYC?$u^=~(OM^)Rk&?vMu_J&qMf&OQgOKN1YVYhw!F_rpjpV*^#F2N zy@kl_b)(^&x2d!%1i*$}4MiL%s!J|VvBnWFVSb$c)ZPqacB=u^>FDV!y#JISj*ODp zqSvyT1Jlfh$-J}-@mFxlgsVo%%{aqHFP?En5G7Z^_-mCeoK8j?HccAUGVi2{2o(zd z0m3~CUQ|C%|3hl0*VARs>&H&ccl7`(YgDVh%WF4xy8kqW8IX)~jo2IAbwmWw(C_>1 zEQWXM_!FrZC#+0nU1Ec#TPgM@T!6TOr=^@NLMzqj9{I*J1G%6izfH-_;XAxdaaAOi zu_twY^%FI2%%eFyTuam(|ZSPoOGn*oXCLO=PBOA1GYketGR{H&GOPEDk zyNaQAS)<&4|B($ql*T6v;|l3C4?t}7hZ4mGLRL&ALIPZwdY+c~?SQ(tIxx}&=L2`@ zrb~zD*MX+@(oRtVza9=qE%`H1JBXX4v25N$QfdJetFx`S`JSWGn8eu?k;Jvfq6-<= zGbFwh#KC35i3>sA=|Pq7hMi`(M|S^t%mzp zza3Dmc>`p!AGPGL$+~8*NkxYY8*(qx(|*fJ5=apttTf5GdfWRSD_#(&|$I^Mz-llYylo;)kBhNif33G`&-xE zfzHA<8fM5L2^yR(#xnl7+hdQ9@NqlE+M55Rhy`fUP()LRvCO()okh~O}R6-$!=2Mj|C09ftmK6M}2_%~ulzz&8 zk1#nk)$f{jX5X^=GrWHkpR*thlT;TW-^IOJ%>szv;;t7j@&M^Ll;atR^^LV5Oi$QH z0l;#EmujfPynMQ5Jnl)H>+0*5ZNO$41vK0U4SOko&|F!Z$Em*P%Y@yKWNtS7%+S+J zgBM<*#hwznCx=2z0#iV9ykfp{cbOsQh4i$T^&EX7Pk3S7H3MnhGmql*VAvgLi2a>P zOVO*UdA0wSj_bnbuurFHRo1ZVUl_3L4&u{U^dw&HA1poDLyZ~c${Wv*kYNr4KIFi z6qmMheq4;)83d(J(#e||tVI`{cw@#wh47DK#QVPJuQo`C>&Ti$ZrT(5#0|A=en|9J zwpo6Cj8;}Qp}w@b#MuN5IhYBj%3IG^NN3%YN zLJ1oXim#9?0XZw1`RgIaAr`1b9kGnjt&(LkSSdsYe=1O;QL`1aY|xrmY^&SHi@%o~ zlh6^lmoQ}DcZ@p4tpRg2VvFva6r4CmUSROG#vJ*Z8Yb$op=u2y$ zU>Q+f8GQ#J5a__-5e`}*573NG!ly9;r7){XBL?2oWsULMG^lRp)}HTC_}WX3eK2D_=U@ua&5lsx4*ybg>!$ zxO)AN_3vQeix!a?y^`tNOqIY!HYFc*!kzCZE2~KGC2^F4jN-;Z8-NOQcja{;SyMS5 zBcLw3D9Am?fgPuHGB;X;?5MV})&dI7s1m(Qi_)KgR)9${AQsf|#6m;dj0PS5Wv z4T=>(JvOZ;CRgHjJl$xy0!rgC@P%$q2q+R38#Y(J#!IXG^u~ z%#!xxtk!|d+nElb$L68Hnrc06n(xfo4qS7lGS69ptA&VSgB(MT66BtL;TxbhwS3=2bfez%u;5LP^qMF~84#zB6>f>29<^ThCW;a~ul1N)Y5rYHLd=8(V zQP8^Kf11h>T$LTmX!fEwxfyh`vUZyTxE8I!%#^EGge4oOA1o_ClyK9d`Mr63oL$~Eos>U|X)J~znqltU^gB7=-#hv-*Gk*b&&0f| z^8p*7^{q>XD)F!c2{8{BkJNgDupN!-8GrZDlDr=X_#IHrIOahksUOtUlVDbCu;BbB`|GS(1kMh5TjEv9qAB>qp%eO%H z9~J4W$*1^lY+Ro&mgm2*-`RZe|2WFqV!qOUGXJa%KA(TQCjK!W=RYC8CMLhpKen=u zls{hPzjIaX`3e3(pl%-g672tt4b<`r|8wUC#TFINrlIMd-b$P7?!_fprUbZ%0&deWUJT+_H95&nje6Fr?@|1=( zqfZ8PrL0e9mBU#@XH7|>CH2<2#U;t4qXqL#pIj3*^9*OeqNo}DPbsusQliBCsAf&% zL*n?nJqHLxLP`>ExLU8k=(MD!L08>5(GNZ!xBK zUSm%$VmQ+sMI1zizr4B1q#M8J!pbfg%7%O@)FZsk9ojiv*zXA20!yT@o~FYc@(Vj z*cp5n13HbxUGlpc3H6k3&map$^z|pSCAAm>Psa2;WTLpD6nc5jH zMnpX?0ER!g(*?*~TrMi+;ldw6XYVIuf5p26NI^7>FS}t$lqy7yZ$ZoRAU3f@JB351 zxrLyOeZaY0^Itcfg|t;|{v82vakjigmol-B4g}K(+;i`jK+giA3b@v^pPNVyZ<$yc z;He}Lv&S+yHMoD0f->j8*oSAiINI`oS^q%o){+OGE_dI7hu+gqDw*xswC5gJ+RVX8gpaulIc$SR)BXr#T4Ra z9({%`bj#C-S3VDkJ?c-7i6Fxf6OiiqisT8TW)56`^dOwFY@4~rKd+aPIQQ@mOt`Co63P<<1 z2gb&6=-}qv7b3~VlM>gZoV+zt9GSz=Wbb@NLR;f8YdKu}P*v=1P#z!hM+#y9{E5Gv zx1(?dsQc@6&*_;y_?hTS6$}N76}a$?SIpd-Dd4~E(J9IQNcZ^2y9E4D;!Z$OwugwI zqsGdPBII0(r>hu+L8dfF+afj;*5W(h**dV;s6>x=smGgt>#?cl&V6XX25y^xlE~rB zAQopb3;M$?m75?dikZ-e-Umht5DDOi;KA#8{aHaEoeSjJ$*zIK<-J!GVP&1@KjKYF z(N_`=ytaUyw>tLzUiBsLww z_{;#yn;vEmj66Jf=-?NV&+h!ZyIBAG`kG?1t<@@{r1;QwDhO3THKfb_pR1^1i4*S}C0UPwW(|G51W5pF>qfa~KqH-+FVh$PBS zF`V4#p~=h2Ayr7>!Uaq}KOTu!2lx2u6Ja5(IA!*EaJ7Tbj&1&u%@{TvmxaT>SnLfI zB@?187AN(V$q|oaI*Z~2X9*m(0Cz2dkDEHVReNvcfd6t*+WAWN9r$e9QEV7Yf3IuF z)@7kr^vcziK5IA2{_+l1f6PjB}?ylGRMVn17YOQtnqC26#+cM;v?o zacX#|JUktWJB7m8A0iJcNDqulF!K~BluuuOTB{6#{`BEd*cla#U1-ptBWr@BDmM>eKp~LHh~yX zsIbsTe}xuKS9ac@Di|M!iV{OyXsp)xTD0shO3=e<;bIgrNn$c*H;}^^E$iA^-){|9 zg1eDasTu;>?rrFK*=K^o$d_jIiA6FRLk_SaJUf5QNkwV?yh^KTK+2Ccp-o+bH+cj) z<8wl2I{=c_Ca`+^8>=%0%&TQbP0TsjXY3;O6O}3fIuP2w*@_JlJ1fS8qw9m{Pzklt z)v^|HQ+UjJGXT+1arv*F1`VCGUJdV6SE7|y{Xr4{MKI9&MwfObBeY>nWr=xaotgu- zy4{%VxcpiF}&d4}A5*lah1h#o?YylRYDF&=u&lgNoMlqq34HxhQs zd>`~u_N7yU_2PbO{B%kB}T2ZD?Q;jb`PPZp@r>z2N&`fx27)|Ao@lyccMq;WZ z$c$EtOR~rhhAz>RWPDHHaGqUKK-)Gb6PoXBMAM~WVnmT|w^Q4G3CBjdjUk6``|so7 z0)GdJZLBg@Y#SNHK+0qE%FY`ptxS5^-^RU z_}HP)tc#liW9S358Xen&i;6kQyx=B)f{!>QxXY^6+tI5{)$&E#`^&{7j!749+BTbY zRk-6(Sq>K_8CbIgJ0{PpYwWF_yOj!+Dukm7Vgz{Ib{UVZirQKmOC-e zFZ+QLHItAe{5$q%OUDeaOChJv>Ecyt|3kaO^(l3I0Op&|d#edwJ24INBRQJeTva}p zQ20h3iq}_zk`{y*j+bFiG~3Aowy<|@cVQQDNd8v+l^FhnjP;hK7*HX8~0h;I2C1aEHj#!>H;kD8hp?y518V0AjkD8c)`BX_Z#N(*s!@(?ZLPnp9Lx zLFjKeSJx+=O*M+_NUynWE8Y$(;CLt3vJZ5PJF(Q64mE)W6+v=q_NI!q<_S4-00B6_!uLIA_EjV!d__4IJebLfnZ);Rl1?&1k#BLF{x*8HU^KM4+fMzWOsXBv1o#r?lH+@ zsCs!^k)2t&b9`$1$J=I<0Y2wE)BbUp&pcLh6SiofYkdnPJoxO%U5Of6;fZT?xG-8^ z^vdrd0oIzA3prIQF4A%}?%Fn?x$&j+6$?M3qh!gMfUPsk& z$tBremR6exuo=`nvKZUkfVL22vxhd@pbP|4TYlE>S~!6j8soKyFyfHCV2T88)TE}D zIJ)Q4P7U$S_tEJ6hzZN*@(y$jQ(Eh}%K}Kp*y|UE@C~nl7+#GPe`%g7k$6)E$f)=n zd-9|IL5jFzF5D(mRLBx;8^N{b(3@k0S`5$N3Yl}t!q90R{`JxKmN!VfEQhVzF`B|A z`2g;?4*w#0pZXH$O%ba#^W;-&^Sa~;!V*&O^JE_NFfv0%bYnT+Invze;9ekEWjq+o zNmkmv8qCa3D`ju(hx>0)Z=u&LK*ipShp6f`c%p;r0awEYiJK=y#=1Hfg{8I9E>4#h zMggt%m_SY&+a6Z{CGL8}c_J&NkcXoR9%#jxmjP{B+9G_b0>+yrFvj0;KG@dM6QN8x zCfPvk(zA|i)HQ6=gFb)y#irk~(J#Rn;omd8k*1~R-;mzwoR6<~H||^jd>aEUpVLeP zQG|!T2-t@3UK}>I{!o9xA{B1~M*Q-E`#Cx$vYPe7a%v`kdMtcMv9RM!r(xNo~;u@5WzdZvj@ znco>lN{ph%U>f{>wp@<@HrxpwH{<>ewt0!`c9*Ab33Uvk+0Q3$pSBpt_I4=;mZP`I zf$?6iu@+9u1vY5V{QV7-Mta-fAe7R)EOK4ya?W)sg7^vQm)mxFVumm6k%1-8otk*Piy3`+!qndm__(B-O z89!{xg>U}As&WzpuxJG;o69_;?}PhZh6VV*MOpGea4${9fdu7h@WbqwqvJwU-k5+O zM!W^Yn6A3ge%*?B)S)!_PHenCXJd`S^4dzv@crP34_8g7)WfaXp7w<3h z)$Q!JMxBBSj@=^A#Ox9L`goo*M_;D9TwYP}&_Mfo(I{ErEp}${LBeqQ^Sa2hRTH<<{$5$*hCC`1 zHiip(QgY4Po7HfB4!mdmB4C`eqFnqg%SZ$Y>4%G8cucR1h_`)EggLxr2)B7#Qntk8Yr`;!dr+@Hq%-C&u?@Q z1i1!PkGCk;Y)tMugn{ta%3O(6LBA!YyK_t#M0g_x;6+D}s19^xYzi~ZzZldQ;9mfK zkqeZzG9AJg+V+kxH{$4|_8tZQ-isH7nCcdtUwGN%B=3{H0%8C$^UEre;AmCA72j-bD%CfreGBr$-|&)n`W&tIbMeCJBF+1XW~~9A4+YK z<_rti3k=wPh!D8^!arT3N=P3?u8wOHBYS3#2_@%TQf?fTkT~BGi9@ZK;CIA&G@alg~HJ?!%p~g_PyEGwYVXHjd;@y@H zcoZ9V`2$3^hL8oY4i2q^_3n%&e)?q{&oRK0-GsGXfXTob`cM;A`9~9XAEbbjNpNtz zN+b(E3{k!7FNgml|^jObx?@!R*5%c01Dem4hI@$UAP~Bt&xFvCRYNAGN@EbF+<4`_NeN|Ge5Cx`c%#AF;hkWyVI^&bIKg5CYFG}^AN8V9QKZjwskjISWzjH@4`?1s z|9dl*JjyP~dY>*v0HN{=b=41>3rb`~wy`!)@&k$ai5Yf3iY9q(30h(T4rb0V2|9OX zPH7Fj?nz>AL`fOC9ZFzJ$o=?GmAgmsUuk@f*j$~t=hIN+Mt&o$2=_%;n5CYtz1q4? zH`N@wptCt9z28SkSyNYJixPsQHLXvcN9(yksW`^4g34L|F{mOXm&~^`zk>{S$J4DM z-<5qlEydH6$@%Aa`F5@gWu7qnAT4vSr*mI9jja_8uzg=E`axc%Nj2w4VZg6oFQ=%5 zN3Kc98baeQD(BIE3zCi_{uYc%1gGs`Ii+kmipC~Ju~%-CIEAo)%iAM;j2$j;V!gCP zrqI3GOQHS7LGfjidX3xxNX3(tJ(Kq>Hm+kl*be-Xv{*ZjDnx-k$K`f&lkS9XT}y)a zq8#sWo@yM)cO*~Ih;bTFe5b6nS3EB^oYH*kGSl0K2lXj7rW}6s7`V(7mbS!6^c*&2 zuvzg2j#!Av4X3`2s+DLz$?(?wUM!~yyUReDNcgw`Y1}1afl@Y1(DZ1;(h8wNm1dj9 zuw(9IC1ddY5=n_@lkzy1pPAj4B_XY&!0`k&w!+kcot@v^cMW68JZ%ksB(tVSw+Jfwj;VQrup4e#)?oDXY!v*05LgR`^&uNqeFOK7kP z0p%nmnTIMEH}-BLO^-l9Y%cMpU2x1D(1x70nUc~R8+9TYr^HI^I6j{~Ger{Zl^$3J z;nyU?l0!-Hz@px(M+T}7_08ud#)mh9GdUoDN)+mO|BM&n#;oryDUP`Ar25GZO7y>_ zk&(W+W~ncR_(bXMheq^oW16pC5ifF_7GH5o5K^vG3R}1y^9Jm3OnxIl`6p8uB+mv}_+_3#82wnQBK;CUp18%guFlo! zZr?ocAu%`Rs;%Vk8P{8@=sXkvS?sL?sEY)xv3L#xrBZ|FCcIT1`6q&#C&4MXu*`q& z2|W4KIrS^^v=cYcSc3*#YekhP`C{a-4c`TQF8bDxdZRh-;^LvvTP-JgQj~m4cUw+H z&`=y#(0($MG^iKtem5D?bTNV3`uzI?xM4#r=?KPsjTqASDwcg&Y+XRz2uN}0!={PT zVOT1}Vpnkmm-+pS16&GA;GS+k7cSj$4NCyCp&3!~OPf$HsJU4Hl(b05{QA_0xq{w( z?N$C}UVdw7z;$OQs69Ta|IImGqf)yYiCU$byqyy*D&}?9jc&UO%R+^Hnq$`kv{t%y zT-RdLo%_7jkWA^yZgTq72Ee-K@8^(P#E^tbAVd{14#ijxr81;|N9=k9A++Sz2H)@L z!VkA*_|w>C&=L+qQ_HBMtxd4lEore!Y1t@a6@2!llDC)CzBXC*jU#3!u_QR{T+Y4p z-Q8kf>?QIC=rO1AYv(Ss$TX~#4ai4Tc)^TGG&!;9xxFLY1^IZMDZm*OG$tm%iQe3F z9N)cS(t-cS?>=qv#jSgf!XNrx%CHM;rkA5V`#-ocW(V?HCNPT>gXgi9^-ucxj11Jr zWTX?H0+3am>$6(t=$?*>wZ!l2y+qO1p=2vX;&wU%BH}9CpESuTyjVWSX439aL`ni*h)`aUx~Ebx>qXU!5*x%JK!%Iw#N<@P#&MR+ZhJr$vE zzzzB5&$mrvvnEw7e;g7SXj+_ww;oDy6WoSI9qP5Vz-)%>1_D-Uoi{eMtk0aMHZO(8 z#|xP|!0Nyq)r4Q>QocN>>G&_jyXo5@tVhOB>y3SmEBl~#<;)K2?r8DrgiYAU%f zF5){v-JVzVIr3ilm};kHM;3!LnZw8+7{RN^fMTDuV3Xg8;0*8w)hWYdmM!L8=BAE} zzfFwQ<<%$?F97b_)!D9ntG#igUu3wT-f*D=wXOVc!WY@4j-4AgD>eF4l$_{ICdhsh z#O@RLwiS!%x}Nw?(*waEJO{{oQ7?b&=C1u~=!EhJcu4u4qQYx`{%EWVT-7oD3~^7H z8C?4VcSwVWR~+1{;*u|GvdGDD?tD>>b&^Gi)SkQ^@LWhzO=a!9h+uRX;I& zxtg?27~_2Shs*xZGo}Imu6Vz0#?Y=?rP_Eab5oVxL9VA^vsL|2^9X*95#jEgypLdT zdT|?x2c2uii8_aity{v5nP73B<2S!*?y`!$srQ@9L(IQAIHKE_fX8PN zkgn_6Kx5nLIO*7S$LQF$-7zb6C+XO>ZQD*dHafPo^S#eL+5bMBwW?NKbyC-wV~%@} z{ij6pND6=Q|L-bah_Ld1c%rySVM@yX)!J)?gZ>jYgxiIq3I11`|0^v2pE^ykDeOr7 zf3@UPXb~2mQhm)1pA*IBQXS=$4z@%8?QrMzmSG`i|8`=3rZ^SG`?ml^mx?r`>C$yKbg;>1xZn_vQrW z;^>w>O&GY^_r!gr$<}Nc-N~{Jy~>jv{s+#QG4cj)pR!lvsd*Cr+ z8^f}LV}xtnPTEv_#9r3@Lh_ZD#iOMYnlHk=3h3?D5vHA2*rIXg2InTMYwTn-pEH&+6&=tPr6??#m;5emHP zk7Idlxfw1mo2YTeMoewU&jvA$6TZHTNT1A5EE0o1gb_(W>}Ym|l2_<7y{uz?91xZL z`&=Lf-ObIlr8^swG=^?nqwbyjdjjemHM^42QH%QB``E328F~ET<{*Bv6xy@`(b7tj zR2W2aP)cx7Q?h@9fml=qoBfnuKaLAlf~zZ*@p$S>w-)+~Hmmf+TkO z*5W$q!2ma4kpW@Kt^^Ce+7|-@gj^iLfb5yLR^Q$TGnM)DrexOhOsAHlvZldZ|&OnwyqjI+y->Wi|@4_`NzCd|q_WbnIQcsn>lDE=4E?FB6` zLxir$1v1eruwyvd(2+Oc*;4pngr9lHdP-8c86$2q&QJxi(VkD_CxE8Xird zl&~Mkh8%8omg+b)@_;?Af9Rb=B$PuzN;!)FB5g!jA7ewYHYzQro(~#8?p{iSxLi9a zWfNX7yQsV9(%tcCYrk9A-&x;D{@`WI8087v+I4O^9Yf|b#p%A-+5?w71f%0Cq9=^2 zZvW;@F3;ZW4}oI!`D>veFZ1_ze)}|}#E0&>OxZU*XSLYwLz)IG-=c)|pFG1w_tiB=yxtvS!(@1(ww6&c>Y7UQ<24HBy<+>o-MYHbVr{0`jtQo*`Fq_(Nh zHMXH6N&Bs!Y{xP_Jy7)sSvSwTeqqDc2%_Gub4Sc{ zZIih2qpea$ws@hlvbgxKeO;U>{18tv*@L@5J^;mhcoZ)M6``F8!y;|HCVuCfVTv<5 zqK@pB*apr_!ku~B5-k8G1Q;@N2kf|g;L*tq1AOU&_nrg0c7;p+aT(sCIE7YXR#*Op z^-WR)n` z0FS!YkD2zCf0K7IZ*RBm-i@K_2m;Ct)fz?fTw0hX9Mrr9lq~}=Yi131LOae z@PmIyy=m@=b>K=d{xK^1yoC5f2|aWg2KKPHt{m$Lo^W=0Rwi|KTKaHgaJ3J?!JPER z4Oz8lo-Rloo)5(AMwkcO@0r8P`7f>HZxi~4$aOE@@*WR`qdK4ReYxUmlP+;Kr;>xbIPvs*FZ!z9oFRbHp^9T#}-0j@-R!0??#C z!g4hmv?tN8ARBu&<6Pas$o4!aT3@`{Jq#mln({O`;IlE$b%TC zb;Fq8XoKn2PJUXdeOtMg$-26B8pVL6?32e15KE$8^(tc_s~e- zPPQj1wketMT`HwOFCl^`M2|P zO^d@SXSA7PznB=Ak3h5)TDLskBBJRmoIpy6;?qZ3q?$<*^s&|t`h!y@IXJL9nT3yh z8T<59PburTL(wJ88vAZZaB6Roqm3J%?UWKGSZ>&$IAnn||M`=Y2Ra>$J19YIm!lQ8 z$mmksO4IJcj>ke-FHKmb8~BHB4CZzRUc<#(5YPC*fH9Av5nGvh_+`>}?N^D8za@_S zBA-QK-wfqZrLrTc*77j*2`moPiXv3Z4lwdV!9QueFy}zSuEd zDOF>~>cwsr$9f^ccka8@BdGg2@?srUEurlxY{tE=pAv6E(Q&bM19IHX+zq<64c&;J zB&c`qe<3ZR2_P)aY}-{0iFYj_Hn@Dri$ouF1(Q63i5i>WNf2)yWcx2<=}cc3{xCPt zM3!H>Sce5`s_Kz{fH974o_AzYyev8Q)03z`Un76Gl0dm|E|8P)Sn_QgQda3qa99GT+x|3aZm#b~Gyzke?TL+lIwiH0^a;wXY(ooY$BS$UQaOc;I$f!3=L zMG7FYJ${Tl5? zrpyxyxxcv&-i*%)KS#waM9%M58}ck1i7N8``Gx`c6c>IZ!yMbMz&gz|yQ^r0dDGh! zh9J7C1i$YyrAkzv$f##yvNx+|(Q`|G9?4^l;IySX?T$yE`D@Wo;DE@C-mcRjqBhI49ntfLq>wx z@OKV5Uk$LpzAf-PUL_qOn5679Y9CcVOhr%qQLO}Lm8AXRJ#{dqS%S4}d#4IohW?|j zyaHX1b~Lo#?Q|Aj>4^erWJ z-jS532?#c&S*o0Ve70UPdJ=O4EzimUi&&l5fWlf}JI8bK!f+w?AcrTS7KUzo;v&M9 zH%vmPfV@^V_-2l)wHPxT;OqOBsMG{{+G8-nW)qSit-eR^evkHfqL*f$gDzdcs`B@g zQc@1Ryw~Rs_iNdJ0jq3bozP|Pq}W;ZA4Xk=pFqN-Immu(3)JiN^b@RnxkiT9lzLqb zinBmqiWKB{*Xpb0kWzdi8>}mYvM{b6EBkNALHwzvQr<;NhsmPwuT?XR5n{syrU!>E zpY3nvfRAuE3=w~T1H`EgraPRhnhWQ6s~!@_i9E9Cry;creoN`J!MBRPWJfbfeV%1M zflOl5#Ic(ra9mhSMWYNUs#R>3`)5_KY2w7++222+CYhe2PH`i-Z-}Pl(dbPfC&85> zkD*`7Ju;A4%ZX8)3KIZbITGEdDpvn%af;_c-_mX;vagi7r-OCF71^S|ih#mfjkWZb zp{wUr>H)WV$m?6HCjzK8V!S6G#~IEjV6^4^>56UKT%JUrytzDYcEa<3POo5aDwj%0 z!`la{lyj`pjXW?)Y!n)Ow_!hCgE*5r?5=+{{%l(8=7yFWf|Nkc(5}7jjour%9pi#e zK8u!)=pRN?ux&H~sK}cz6joScEa{AY;giAKNNMD+*9pNm{VyDN)}2Jz{v*hhhEK+lpX`KwN+h z%xPg)y^Dll`zjr;3I=@(KOMAAx`x0EyRt6g7+F%MabeJVed{aJx@kmqp0rlzdGPo3 zNC`T4oB$`MtA2u8hR{}}lUe2i0xKwvBUH^RIr_$fZ4%jG!<6-0u&%r-`lOxC=d#)j zZ;be)%(Yvu(xy_F)|^tAYoItDcT(8l*{$;)Yia1_8Pu|?pWAg#BsiUph9a${&1$jS zTe-+Sgmx!{AFp^%4cM+$)}TQandAqonx%I)$T<$uH>;I`P*m8odl!#@WCzgQDD}F* zEr@O=YpD$SW_eq!f@|q!>7>Bg20i`ka8b`%!G!SI?hy$=&Z&`rFxz>u7xHn521J~y zevQi^BG1~R;$Ozb4eaKK$36#lBrgl_WM!eK{3i<$6v+42ZA{U24sH4!mdM=*oW#vn zJau_7m!1}X18E3hB`14<@(H$9yf8`~-D=jjZV#%RX@te>64oF=i-tlVw^r_cNBvRhHFD}s z(RSCi$*oEg9mfk|(cDrFUonCtVRML1tKBP$Wi0~R3+{p`!_A6q# z(*=#+k^$7Amu$LIhZ2dwQS4A;y3?YING$h}U#9`PD2O#+nQu{YS!HE0x!ta%Sf~UZ zl2pN6QBZPDC#q+th-4b58Kyx!S3DWrPa7X4IcZT}2Yo3_h&NZ)(iO>;Wb8s~4L(;R zlc2AsLL!oF9`;Wos3k7%Vk~aytkblZN=;LRT1r568BJt7N(wNtk1{Mp|7r ztX?Ip6YB!#62G1g%%9&F?!l=bILrK2oegEI(kMRMOB}E49^mF^=0#p7V2)4ObeRsT zos~4RPsQr={jr|<;)O`!N2cL2AB&iov?G>A%7>wXu3HE%uprFb-?<-nKx_O)w|(HE zJgDEe62;MU;IBi`^|r>x?A!fvxX{5NGz-QglEnxhaI@|su7Ng9HM78#{6z8V(d?7b zjg8$2#v->pMiGL)Q@|!L&>>-(AAr$rGBwvOUmOvYoLg zEYF@{8HJaVti zgI8cNo>gRd3kROZ(jdM%1FRoxc-Hw!J_p_|=)s?{po`BaM41C8;%k0ATn|N^W^^G< z+w9sRzQIJc!(1i!#aP10-mjH?prX;UTua@*>!aI+7&|$F$XA2xY`rW8R6fBPvkG0h6CE1naJ^6NO0hdN80LzN{57+ZTbi!BE6$UKr`94b?>_@vZyS0fYK2cx zup*#AwWnf%*gF`lC@rB7 z8T0K2Ee31hdiBF(^4u~*<(rc4lZw~;rZmZn>(0)zz(y`*bMQU7W{{}HOb!u&t zu>@!CihQFe(_7d-lZPUC>uXarbRLy=T3NV8t&zxp^`tXW(C=g+;vuCffu$(ze%xoJ zQ<;Sxoi|0Db6vgj@cP7m(2a31^*M{hCOIqlK`D!j?(%pkma6Ro&Sk`9iF`w&9)!Ma=No!d@ZLtFTd3oT(Q4 zE%EWdTmKuPEbeDP!pPfWRN9iSPJJd&pMhC!dVD|NVZcKe(m-!taOqAN6K+wODdIRg zy6dIL1&S`<*EmF^dQBK+-sf|SYcsFuHF_ z7sgCY8wbNI@A1jy$W$yg2BjHcq4n1qzfk)G#oQwP4j+!5gE4e)kX-cD?tj%RBg9-KooaDPCglSSj&UY?gO~ekdf;B(m$%VBev)I@~>OlguGwA{sP}RsSP(Sgt!LjEWW)TY1@B~@94*&LWmQ7}^@1!s+ zNA?xfBJklyoTsL3jDhMP!xI^XjY0}+yE>_cmHcD0t~CI-{AWNPK`H~0TKIK|t2>XW zARTtBv}P^H?K@^Yyjj07nuyS0-XzQ`^#7aZGdUiF<|ORsu+ zUBI7p5BZSG$E6|ekpPQ#i_3dHTJj$oCbh4VK&0bXD+R+J{qq>FgDxt3dE%@aaKsvEyOfS&th8vZZMgijK>PIfP~g_< z7;fj<81?@yGo7X-V@KbOiAtNT!2*U$rqw!6zbRb}46&f87%MI}OS}k&H=}s=Zm`X+ zLlT3xl;HSn$g7_0Yn**z6E1Ix%evEfwH~BB z;kPV5vu`_ILxwtY9}xTOLwTNep1d+j+!tk*tBW`6(h~c49)>Kjh)_4%e_GTi$;7+u zF*u|6Hm0MVv7jrW!La}yI}W-aBa#&h)VfP{nT|wCm+H=xZBM@&ZcNjxmb>$_bQtVy zNOZtHpCv05(tQ3htHr8!qI*NZ6zRxJwlZ^MyQ>WKk5Jq$inpyf`3bUkq3W# zC|4teKxpHB-VXOyuK-y&x2A`%^UxpEG5Ni*K-!du zN2x?$yob1xD%BUzyEK-uGMM-)ZT9azh}(&Te{u|wt0;gYRdNf&KzSHHnvo$eQBmUW z+hQ$`j3RX+rj#OQW_dYGew0}ek9zfDMR+7~U9&lYHDX8V9j%s#tsA01y>DQO<} z_+d6kn*jdoil@MT{_JV8k_W%Dj|8&@{RxVQ`8?VLApKi_55T9p?1n&?`6_N^i!J0T zGL7MB^bj@)sbR4;0K8B<4v#y9ug1O}(rx!&x;eb-xuH@_nrM-*eu}kyf_LF9glrKB z5tV@)5)&P=tguE29?iiO*+%~rc~Hb|f|dIW=&GhZ6y=b6U7$tP||TGq$SG-dbWz)X}{8?eaW=mV04(LMFG(f$R2IP^fJMN6|V zx@RWegZ?9qzh$0?=4$fydn>-!BSs)E`Qh-t^9uk2jDiQ8AVjkQ$W&ev<_wx#m+wME zyD?NjW(&ERkVCLK3}r%xL%m`Y$kG8gTDXjqnu{PX-91;_k5iZu$}s-y8Qkgwlh{E; zF2d({p?c0_@$78_J-32r&^Z^G14IoC6l9}u@^-Y>rgSJf67Jxum=jka75+2>*fkm* zmTG`f4E;8VyITmT+WUBS{TmK{O-Ox->iym+vYy^QjSz@uYk7ms#RwObF!+J%bX)!r z;9-4pvk5#^&fLltBr{oq2AGVP{(!6Q=eO{1&-?8ab?`3V${ozc+Q~*3D;83{K3Ym!&0`0m zl*sP-0YA(^7v4Vdje&{{=OYUg+sVV6Te2KeWQ~tLo&F}N zLILbjei)56K34f9xG>1<<%QRMxk$7`avTWt`Myi~Y6l`^VE6YJ0y8Kz-VuO>wkisY z^q-mOA)9wI8A2AAG)C|3gZ-m~$t`bMT=y1ybs#P5bZL1oYL+SGCBL227U}lI!fd~ z2*HvvZ2Bmh!mnD&*%stPPCRXUK=C0}NcyvV*K|o)yWTQpn;jMtYO}t)T+&1n7%IFi z310SoHci9rRC06Tjstp?2y#Yc8Y~42O&YFHO?wSh)`XGx-mP^6CN~x<&k@MpAU>4E$m0$NC-n#W zl_+}i0z5XyO6q~qn6c2uM>zbXd830Sc386+h)MR|X4-Y@K)IGV@bP3qL{>^I=wwQ> z2r7O&&f6pP>i6I3gP?|@DN+gWSHc(5`vPBCGR@j^EGXnt(5Zg;_rU)eb0YDNB~1k)eKA z@K|u*SSWbU*|b!1%+{IoS&Xmeyr6b8l6$$&of6$!;LZy2^Vlr6*Wlw!%i+7S*|hz@ zrYUpra*u|Bx#bfSS*j4S;Zuh06>LZN)Vt|`UiPnj0^m2^L-O7Kpt;d}q zGwSx|wi-%)vJ=F!ayIYGq#q#ZWlZ5kS0<{}tshZeXNKh4LZTCT`IYt6hhi_0%1!IX z3=)FveMcL9Gu5E$W4Mj#Mu?OZnus=!Ud`m&VeDTJoM7=j?qPk&0pDBk4qQQsayGB8 z_y1>2&jU&$wld{c`V6xh0o{x3sh5}qouBN=P38X)^KR0W4aT4QKYyGpxe^WVT zkvzvC2e+RemLFD@pS*qr{)5|12ZLycar@Bkp@qKqQFxFDytLbTH;Re<#<~scU!9 zs|l_goS86C+3g__78GKC10`(-NiCYfyrii=qwZ<-4tR)ya`nuq3F?j3+E&x#=r)f6`BG9+FhCY{P=*#q-q>ZO$^#pVW5&-rlgnf$tFkG2@JuQ51wW)akm+Ru zNk>^~%^9kI@Cb5LEjg{Le@@R_-knT8$EY`40Ci=n_TNh1de%AlqyKKWOfP^UEvBe| z`V900s_T^KXqossGw@e+#;iIR7VH-f$`Qt7^0BIUO7@4ArU10mmb4>gm1+VKVXTDt zE~De*^rAm|Y?u1y9Tpr3?lnxx+lsDQ8d(dyH7sI}yX>AGv~WX3Dx>ffs3qodYYfC{ zXe0;0lQ*@aP*M(hn8N1eeh>*l`sju1>IFpm&K-oO@&+{v5pr{|C5CTRR%*91OOvE1O{KT4xD)xz1gW6R67EgoGXo7{CO6BQLestkH7I;oGF&iMjk(ppY<3VKS235-~eE-8f5HgCbP+dDXEq6>3IHb z<;5!!9V?>+!>-0!lX_kW{=60TO0hD(r!7Z+(sQ-x%L4EIwz_5e-nH$-)FhZ$5pd>) z`dT347TMOll3~>4{`dZ`=HBih@r`Y_{q|{QH_`jsURoIu@$@d2uL=<|1(~f zoFys31)To+3PJklmiPac+(AE^v@f&zZtOZIciFrAmr*M3sh^)HXT2ZIxG=b-vYjl|MP z1La489^+BMC)M-N0N1ozo2k_Uj72Xy5h7qvecsZNf`|`>D*pB{p zw~B11{pFQ){9hJQp!JRXuYu3}D(^h}`p4WOdG8b5mY;Nsf+xsr5`u0qFKL=Ef z&VQ=dcI}5hx2F$~`HzvJIjX(l>F;O(t^F9R3FN@X3!SgtgWKjOrNz%@Y>B=8)Kh36 z6mYsk7bnz%v5V-&T1oXCh7vrwcq;dj3D>wt{^q3edJSGV{95mU!~9G+#g#F+-s9ve z`>_Dj8@pS+a1}Y#?o3s?F?glF%Vr0mrv$a)53>Cd7!|z376`_U*2HnN{8bevc%Li~ zm~3YEw%B_3>2);x6WIBC)d#=ze0B;jKHb{I$X&vCkbu%5-I_0WU`KD1Y8|U0WO~fJts*{wFLR7aZeXuL2|hne9^t zB4;L#9CSA*iEO#qWNUf!o`EHuWXmhL*y?C#TYJU_35;iMR7KMXF-#vXdW_x*>i>@ee17UiZb-Zl(&$Ij5 zE!6eLblup$C-ET${H;H(y>%o2#-H9UfuYL%nefZLP`3=wx5rI!MVvuw&X(&#Np`!M`#x}5VfY(EVIP&0DE$J4HB$Ok8VFj*+R)Jr$RN~J zL2Xq-41&0bTvY>=bNS8gXG@BfwdcCg$oOC2f~fne$+#k#ye564Xls1$r?Mz5vqGv{TM>~UKS_>{YazoDg%m_!IMGg(~G=VHA4Afuz zPmAUe{Hz*RcllbR)y6e+4B{~Nj29H zEV1XfA2?#7Fdk>mj7xu7Y9KXE7vVLdXD(7KgulOKSc>X;G#o7~nH0^mMoPy_YKcqF zik8Da$BEQj<1taLd-6NqkDVExHI>6!Z$QGqPe$t(*TOCkde+l0zPmCS1W_8nRFUkc zGmVbX%o=f89xv6e6VH^^`g0~0x}8Of2lh9NlshF4>%Gxq)|eJ%3KZSBQKL7EJiRt8 zQJ;Y_Q4brfRZk0np1Lu~IxN;)!H!&mw-^x|XqOe%=2HZG_d5|h5WF-}fOWLCmJ07-TWPP0ndqpcW|<2WG#Yz09U zW-85(#zF9kHXI?7o~B69&A8eVBLg$$ZKDOFFWWoN$&U?wcQC1g(4#H!R2FK-p&Ruv zn#3@)=GEoCXUIkv0*Nd#rWDWAaP0l&0NWqHSr`!WI{{At*MhYWs$_QeCY~x|QHe-H zD>?X{93{R}-K~=)yx1YXo)onXlljw#^O!GiAJxaGO)8%ng$ zft9HmsK@Xy`heH_2m8YK@N%Yog%9@;2?oYdMi1)NXVyqTfTO&upy;b%oMFRh8sY_{ z5O_jmL(#nrc;l_7#vZsv!JBwkjB3^Dc4mpz*2tk~WMltHyTWvF2|x;r^lp(btgb+E zrnX61+!@SWBA`WJ1RX9*(gE8x({Qd}DqwZ4xI;zWDJS&Rbg7tXa;^}7uBVilZ&8y? zGPAE^3r4r>o%WClPwQ*vEKQ?SHQoo7mL(UxkvjM#m&jGvj?*Z0=L@XUoF_kutbgG@ z)i{t_-_cUpxm_ljD>A{#JSC+CiKAc4)N2w`zzZt-dt6!)*mJQHjNUd2)THNu{KB(#PMI>RyiA}x?Ybf>^USs6>VKZ*+3*3ZQK36; z)nlCOP07I%_;f2Xg08;RPO*Qs^HDFJtG?9-{HkUD3T9K%QPIe&Oout|J|}ol^kd;R@f7Im z^MOPK;5`qy;b|% z*x}F@_CR`NU|QyL<{0dE{!&5SB`Sgp?z%}-3c=H%(T|E`V9-l!wilT zxjF1uY{WM!MFjA16pSA==3SR}I%DM8JIQFc(I(#4bi@;vv0`@HT>a zCd_P!qy~34z-*61lq3<@_N%NukY{qpD4vl5lcKQuRL;$GU$IW zq#3paXDpO@oDKQKdsr+YaZdhppKm!#ZT%5l&muWoq+z(f!n$^0&Zt?Lky?tmEWlT; zndyL<9{eX(^zcRbB>ZlKMMv~)Iz=q9_9>ZpL|CWwUwV>x3IizC9JH4KDnDPdNB8#G zeTe75-4HNq=!sc56mfvlsnp&~G4AD{uc?PO75CA&rDiwe)76k>+9$R3$2Q~o*h16o5FIgn;4XiE(_T$)zjcO8kOEIC9$`VmU#eh!6a zw6HZTjYqwYAY|G0Qc3Lo_THgH;Uaruzp5~es~mXDe)8v?tQ!>`1RTsqLcrp`DZxcN zu8w~z-$y*$Xf~bmHOw*K+BkDgU!%zSyX-8r`DiLU z6t=`pyL|=(>%*?%SJ@%R1z&hGCHlRElmN!Q!94vWO~jQ&rXb0=I=bEY&F}CvX#DD8 zwMxJa%Q!tu4l#ROQYBk5*TGDmUoe8xPnMn9thXtgHJVC)AKXV$5|pY(#N@?%Hiv*i zb)B5Bd@jYenICj>J*Vw{M=m4MmCyBJ{R!O13w7lpfIzQ164ye z&O(qPYx;{H(6~6hR;n=RUb__0Fj4RkvKwJVdY({%g&%L0z_0&Yst{xPac4*H@)*qf z`x*B1x;{88p>S8(ML(0v(%pIR>BJU`9z~{4X|c46re1-IMu4oU8?>cX0V^%*3Le-G z(k?kwq4>eSqxn>`o8Y#@z@G@1JJjczs@<oe}eZ zK)UAO2Z6z>W>aHyh~@Oul-1M0(qN4E`BETNWWU~Dej`)!55`lxu7!fck`@{?S6495 z0MnuXQOoHOb}4!KC*p5NZSn9Uw+A3dZKmcZ(OZk-?{w*mlte=pq}*eQz;Y7jAF+lQ zmvn?>EhI;QL`af^B3JE=e$jNPipyHnh|qpN_08h#XB=EBZNL zq(PH`Ppex7J4}oji|7*tfi*iU(irHt8Qv6of~v0(IS>e$tU3DP)rwPKc%5(gp~wWp0LOu|OVGZi<3?Dpi;D{VUem0O|m*USN3U5(HBM3%GE2-kKA(il?(mXAZB#`Q!xYA@qa&z*#!^f8eXiyk&T3tVl^R-mJ4sAk>g*vJ* zwNeyTtE{ftrDa;*M1UNfvM!x2OXu^L%Ox+3&EkoGS7A8 z(v)k>(u({;`!)pPWqM1~u53(jQH%H9xqsYn?WCr-Sr3i=8rUsz9?Qt8f6V@H;b@7K z;kbB0)6?pHhE~jZDp{sm8xPFj8t3bHC82EC;Rd~%N7hK z@kcJLqTHHDh@t{|MKKM^taYZhb#Gj)lsVlUrniej2EX2q`l(5ArzWb|FvJ^$(k&Bc zl`b`?=G7#V?@n-;k-!m`m3xoaO{7% z)fY%BnKQ;SFUVO$#0(|#%&ggDARO=zLZU?E{;B;B49=@~dX=P!BUoWMy;TlyXRpvx z+`y2%S=C;GYX4AIo6xE{TRze$T;GrlIfG2*V-W5U|Xr4|~8FPbkiK8*tI zP5z|y6AAY^HQsiG zAM+SDO|+IG_{jScX0*KgM3Sw9Nbz`-`l;s~fq`{@s~kM_ZZrk1 zSrG;olx~z~26Kd`#E5d!UUme50)P)(`(8tQUYooJ-vvA5+ zO!1_*@*M#U9aHD7P=l8uTz<|Dda7){PD(h1A1YlS+lm`!w zJW=Q<^r^GZ1>Ul!LUhsi84o5)C`^aiRiW+hDdqm<+aJF9dHfkW_oy#GdRFE-T9T7A zlBW1*ZDx>Y{)%Z)*YInPRuUqnS88E!z!vC$*Nyqy)t(jU)SXZ>)P$vzQmSQEh#2}M z@1orbpLlvpl`)A+d7tt}3!uKYD*FET`t{FE`o^NgbbJFn`iT3C=TN`>LlivaX)Ee0 zjB%>nHqL0Vij~sT*mSuq!7*HHdzQ+~Zks~)v;UaQ8|Av(5v@I9+7WINN*O_$KXfk~ zJFc(OCKjh3SEOHUYsb0Zo3v^Gl7!4|c$l5Gv(D+1neH^NUnv{D7{F$ONFZ$5UkMgo z=M!o{E`!7^6v=1+Hu-bk@O1gl5JN|oX5fS2>421-BJHz!3ReB>kN&07{+Mibs|hG5 zL~V1q69lc?A)APqn)_9fe2QQMXoHa0F1UFDEE85kA04B=9DvK=7ryNvN<7DPexseqckiC17>wBeY8O>vKmOZ;rBzJ) ze|sc*or*C5nrpw-Mo@jG)pM?XmL2-erqfx*%T}IO>T;)-SrB=ed6It(7l8>?VkCd? zBStLY75)4}*M`>R2LjFN^z!TF?n)Upa;NQlDyNJ{Zq4jpSq)BE)A3fHt;bvG1pB6X zE`7}Bed$jo0}mZI%KePi*4TrJsPjo#_P2odJi?a)pv3xLwPk_`K7TV>Z+i+C1S38A zsLZqo8;|)#{w>KYf$Aq#J1w8CoGPJtiC0D<=klXNF!rKCO!-HUo5r*zDsO>p!ETud zLD^v$V|Hkl)jo!*LX^wa4X1@EeGhmMk~*=B#UulURv~}mNw&td~p9a_(NBCs~C2y9( z-yga3njmC}$!1K|3T-T=!dFjThX@kQeCQT59C_=$(G?wb86K7nOU~{OF=2&^ZWKoy zL7=O!IcDL0vs9A6{zyra=oUyG5uac-D6c9AbVSRXMasxJjKVS$qTo#HgFi!n{xH_ls%$lZc$DY`>ZQHhOYhvB8Z5xwhVohw@ zwr%U5_nCj|+v}scx@)c8SjXz>v+G)eFbE@m4lXUD-!~7Wd%w_Q)DFG3^+w}RHv%B9s{~SxWq7ni@j7hfvn!ccnp9CP4|8bjOCLGEO zu({+ym|B5SO1gJ}gXvj=<`yi`Pm44tq#pBU9DHY0K5FB}C;hSH8(_j8lbLj)}3< z11znvS)1!=cjO>pImWgyasAo(yF0OT|1g9!? zhoc(@X=r?QjEucdw)u7@AxBRlkr`^>L)yN+zgnLqt1hf+s+dI+ySms4_R{DFphIf| zcZ|qdFwqp0iz4gbi-RXG6glsL*P}*4Jjk$Kr4PsA zm%dfjZ|13YS!5;uz$%-?(4226Qw5Qy=zKQDbLN$4tZmYuq z8nmD>8lHo7tda&L?{wqU(Mr$RQ2I1C58Esi3;S@Kchw zY;&@{r!`%p;gyJza0w~<1;yo6MS-u1g~ah8dRYyIxm}`Me~lvr+d*GC1A5bI6*%tS zs5tX-FX1o7`FMmjqlv1fG2^yiiRTCl&5_w!hoz58X3V|67c{qxcHvF!nC#kL7q(Qh zqD|zf3zVT!!Er!1;9{Zz*O(nV;kNc*y|>4=uGXJ&>qEVB*t&YNj8Po0qchJ~Bu5cD z)i%8U{&*-y4P-{+lm~%s0NMoe^hHGcO|oi7>?9IBGGsJ28u8Gtx4(4{s)gs&5hNg; z%ZyZZ8IpaoQ-GI(@BZo$jF&a7tmK>hA!=}hB6K~HP9P`jEmexhAJOFYWHteM3@mqx zhD(ndvR+?bHrY4*N)1iaYKe$tSSVelE|Osqqp(Gl3IP*LQ5iWY1QZcx$~Ib^TfcU- z2bR7exC-p!zs(+g3c_Hwscr~=NQ%6>0`jV3)3HDHJr^)p2hAd$ksO9Q4N_U!@bbSo z{fekg?cvPd+_dN+O+<(=tgtibgnpe_dvLbdl8e82vb`I{@|8+}3PWL}H!koiYow$w zC5tKrOaz9(jo<;f1J+woyLaTgB^;;F3F=;c*a%03jiEIIhYcd)S&3HtmZl62lY zMx|3WA!`(#Mh5I^TCd-f_HlQg`M*_ocK_+LYd6XQ`aZvl+1y)arVC7+^&m;m7CIWj z2V+dsca)XJgN_nvs#5U#b)`|K$9j3=!Y=*8dzO8`MXyCO6kv^nt`X*(tRv9qnXt}* zABK|@QHqMB&M2N}$V_!a$rlv}mi+f-#iRKh_~}iIxFM?e3X0!}Mg})OcG6w>D6M=R zb3-`W!>0_D!0pAh0Bhrl9~IRAti`cu;UWN5;J3MtQS&hXgI~cm!-E>!W%QZjky%b0 zv|bIXpzjv7*?3%HoCH%2)=&R@ob3x(kF9>zl*q1eUt-~czuQ^;v4xGdBM9fiOXKjg zM%Daa@Pp&7hH`3ZyMv3{>v@`BJ0&g-@XGK%az@~Q^RN{H2#5#k|DLkP-iomR^wz!B z#S^=>%T6dcl7)qeO|_bjjH@(V#IZ*2&KO63pH4$WltSTvadJu?k^04SZfmSltXA6t zfk`R~qs@e~5+zNOQ(-NJRdkRJxj4=os0M!1 zzfWK}$V)G=hxhQZ-nK0G;j~65REFWWW*CERCK@ghCaX+d&Kylz8roYnJzFjMcGD}jv(kHKU{@tH^Wq@hN4pN`aU6%+O-iRTE+GmCeu%99 z1U+iCrR_rCLkHiJC`Xw(HUj`Li>bwXS8BCd2#hQ{)J^znBh3Eo8jZ(ln- zoi^=5yZM%Z?V-@lDEfgSApSyoFQ{3RW~EIT@9oWna*p< zIMp7F&H0XDj%OYzhj3;N6oNVehG5>r!V%;50q)O~?H7bI=R8nhQ;mw77=Z@u=y4eb z!nO6MsC^^9^ZcLGl;P%@a{b?=t#;3OF0Li*KrcBX^fz^_!Az4N;#U6vf8&r5=MQ*y zx2vnG=xJWumpu#+k?`TEbe?&<^}Qo`Ltmz$-GNvBon1H9%`aQuztxJf;UK#b)85^7 z4ZWWa@3O~tYF0u}244a=L%>kdW8LS?jWO@WtEx14Gfdh590{KN8T}5eB&mWqR!kMX zZKyOT4$~Aza{b;$c8B4xOdX0LD=aHYK8Be_SzKF)J?ijeH(@;a+7~|P$0zdo^Nc&~ z3UH{I?Dv;hPJgN}H{ng13A}-X^5}`(g`^U$wX^a_4}c2_ETFUNZHZX&fx-5mAbOB- zc+lc3HlFza1~(2T(_mYW1*bB+K>$zZjdfW~f>dnzF2N5G0@7N#TUA~<z6B43x4`j0` z8lga6R0j0!ISxzbb~AY7+nwzI$!-QJ-w!>X56V-({%Hy?o8R#bhQLmtG?&0U{!KZ*E*-~@J0w~u_9z9*hYRhDI@fX+S}*pbDTYGh z%VRPTcJSc<_ZAFRA>GTP_{N{g{MnK))}vr1Q>f?YZg2n>j~}TUrS_n5d#0a~Hy9=i zxNK^n#i7Ke$4xG*H?uyzv3AgW(z?wWnmGyJP%^*)-9XQ7rJfj;He(1fDt$Ik`wN8u zfk*HWCs)w(1{kDfD&*@L77t(H7w?{F^UYENosrp%5$c^f2(L5Uu3VPhI&J+rZKx3X zuWl)CUHt4hzSuCM^wh<~4zZP;JHnLs7z!(}BRYo?lRvveADe5%aD}{%WI^G!ptSw~ z7JM*c+N!Tm)Y>nIcOm*H<4=N}C_-d(JH%+>;S8oa<&853#UV|6;It=+op>DmweLMT z7$e-HU9not#p>e~O7%*%aQ8a?&v*|6-s#;^nu*>m4V@c$A^WJ5Gw;_v4Dw&s^$Dk7 zV3XyVWz|UpVo(3Y@)8 zVTOJ{_arb&x|I+$I-YT_mJvbP<53&>=^Ro;LwL#Mi^*8x#=L6leu3r;!$cNMM7QbSjy^Z9%$3kNHhNa&Ax^RxR+c{ZhtdeuLH`%_6HeIYj7e&;0CccnDx?a3GHFVHeJyz`C>r57kq}>R zT^VZcT#hmMlb(Baq+P_%Ie0r@(eFKIi$TNjs|&}D0sS=-6`hMkR6?fqn6Uzo2?0rQ zD*GUkVY*bsEM;;;&fNoq1s zvTXP}`5~3oP>wT&f8X6d2(fw&&yg5$COmlrQ85GvQfjr5s3!mlfs9v?t|uTG3+bic zf9rR>=B+ii4Gvgud~&Ozq4+)-lZu(5i7W#KhUR)sc>!Mp?#q_HW#<)6D@eaSe2mW~ zp#?=^YwdOPf*w@~RwZp-;hCuiX$lacgzBM%w#WP(Rl${}Qm9xD#*gjDO!imaT`v#u zgy=^@vc7F5*%mN}SuwhB!Z2XE_(WVem%$<+Ua>#Q_#Q9<93}d7FbsI;D$1y9yVu26 zQvV5VfM5R67W*dK5k<)kD=bi$Y;h(ZB=X{AO*73)X@%w=TvHX;q*mJuV_gSxfJD}5 zJb^Px@{p_VqcF}nLO9sn?L^psjGKAX(G0uf*1JYOqYtCSWm(S-`Xx6BWSx~NP=ptM z%$%?Lo&xu+$nv*gY~I+Fhxx~ISfrOHIh^90}_M3HO3TG zxoSa92DO7d%U^PaCs4YpO9Yw9B z3afsvBx%$8X9?t;6&#&jQ!C2aRcW$nzX)+|BOI`__sTlhKnUzgS8Pf|M;+k-SE!wA z-hsYSMpkR#h8X@s2d84O#C1^ltFExkSkZ>dH`BR|U-KMwQNq2p8h=^aFfX`gEbbKC z=dA?!gzxVT!km0?)O5(kS{aKD)@JLIl;TqE(1ec7V05)hfmP0iDpg#NT9<#&csWKF z8x-J&X2qd*ct;KLiJ^CRM9adN>+&-}c7}!P6o_jZI-jg5t4HHd!c936A*6Acy<7pk zOUNp5JGlVwrz4G?zd84I(i#DxeVuf@U*JVH%B>X{*;}lIww#_-%2FBzkC+skBu!o1 zJ4klqC@j)R?_}GL4c*6^YQ?$wn^wbM)og%((v=2#)^wb%HZwYYzH#b@n4XKm9vCm? z;r$eHsx3JYoW8rspVhX~*_nHN(Cb-$=D@iQc1$d{Xu1ShuB9iq2mJWn@Z;{>MIo%y%Af|@ZixsLk_IGON@GiTs> z#5{=^IS`1g$a!QHtn;P@Wj|SunA z37WcNeUU%rF!ht3DqrE7qFPZez5ALkOL;3QRqEHCiv?OV$g3>vZa0E?*jhr$JJUbs zpgL8qW8Z5g{Y@nhJAP9oVIW9;VZQA>aID$3V3pbA?k72wfckE~=68~Eu)uM`K|kQf zrKw-t<T-L3Z|Op zMa-bG@Un_8l@(-TGjlx!vYKPHxOAKdGmvlfMv29F7&K4i22l0l=C%=JI?W8h5_qLb zXt@<$H=WhbfBeoc6R20l=zxQQVIk{&ndH>pUpzKUOGwQNwO32aD;)!rJSCk?NT z@CIM|)%80ipf(QP_0-I_dCbQ<^3TkOz_C171{J$kO~b(puchn;g%(r}O26TlT9(i~ zchI3H6Ke%miqC_JwQ5oJg>*PHlJ5$)#in_>F^b$=7>e&{1sZ6fOcQU8Bi!5WrAMv0 zF_JLR;-{H}hO~D`O-KX!4=N_KwHAH&*f(+f$j$X83TIf7m>KI~Dymf|?0N|b1FtmH zg$UL_GIE8nu3ypsE(7iqv z7NX4T1vO3VU=M5$r#`B_+^=))YC``=DE=uPD-vFi0x9>=P%hs`s!7OSay2$H&8&Y);dN_4Y=awEDwRh(&-yvl`puH`nPJ&cY9s+HY-rW0*1$~50(@kFxv(Q7brUoYrNm(`ti}lMBfu!-|@h!q-}im)61H&qaG-=PdghH`nN>< zJ*byDWd{U52Q+XbsF(N&?{+O?t(*)mZ+=;zw7I4#B?wH1F`~ z#%Qv^>w1_iM9t->>3Y57A74QQGO~p%>kf)5e+b`TsU0Lhte~g~;|oxn@gn>vs4m^99K<V{<2CD3aY4fr)16|J`0t>hKb3HI(yE8J^Vcaf_OlHV-{x^ z9KCdm##GJ#D>*vrQA@6T8b;kc{Uz9QaS4~28`GXeYQEM-WvCh(urcn%-NoiTmUYwy zdqy?pm3L%v^GT4UjaL`>92ubvOQpIgo5yDgT&yOX?4L!oi>s#FgEFNb0G>03Igit~ zY}sPAGLkvew3xl~TgF?N#M9pVF5QXTku_2V%41}0vV4+Y_1#YJq z;awODJY_M@GG!nUc+zl)0MS(Sw8ZO`-Xbh5^tPOegh+2TaZb+?eM+@+_AGAPKJ8uG zv5--2f!i0OD6o%Bc@*GidkJ^2qV-wKz7sdkQ@aT1!hM?G$I`#v`r2>mRI)}IiOH~5%Mc=|P4$E@CSLu+hR6;s)4LwEeM?;$L_`d@p*R~4&=p4tndlV& z=xtRkekxQaG`KP1mCC7)Z3tB3Tuim@71E&2QRW6km#>kY@k5<6^h zp(2sLsug8lad&eSMYVLRFE}#T3!>px4NMA>%-6!4q>D@5~lf{(*U~Tbfw0I3{Z|@IZbvDu5ZrNGq-em25@809! zu=12Njk4Z%5KCCwi&8d34V$b6a3QKjsp{>gMI}{k4eu9KZXFI6jmK$FSagn87B#r1 zz3Kcy(nhk9JrGf!SAvJLeceFkak^BLl8=AV>}=?F3YiDik&{R#e-ytlRlbk|+(Fd# zcO1g;vd_q<;ias>9z&H8*Gtp$Vm;03 za~F*WG!NKD3Bhg>E+LpC0O@#>?^qV!ZRc10!kZvLn7Ch^ zx&O4pcCPH4u_OhI<~;4O^fm7QZmHoV^b%&Ebm+weNlbk;qs7ay%6vW;+c}rY-ZZyc z>XO}D!Fq@fuaU?4chDT1D;6`Bw&f_4Velq8Qwm*m9y6xiv=)&o4ui;tw<*o+f)zy) zEp$%43QAUyZKhJ^Z0_BOpE!1YvU_=2@W8k4Rtq*ULSQM7ZM4nUK%fEx`U%mEm5jTj zcpmR7&NWn;*7n}?;xahw%Pg~jcM396Ykwr)^tJd3d!qBjf$PV2q;IRK$p6~vv?HEH zPy&@8&1afL(8>{4va1C**SS!(^(9gOg zneylUGXC9xx4TK$PP5fq%eU~fo|VnE90U*CTE8NWyF@-AwT=Rm+8Xy3h;Yfsqv$s^ zyMf!U_sL=Z=<`Yr0s}<|-9!G=3K+1u9lL5lT~T^gj2s$-Vw;;xfTWKQdNUFfYu=Ny zBK0|0Yl(Tz)0|?e|4=$KoxcuS@*5@nR1swyl*hVpjT*Enp)9mz#z+T}jQu?nq3zkL zt#R8EtFtUt2yz}BPdfLJtlJSPwb@nPt}DIl0!EEJ5wfiF?Bc@_zpy&Fe8fbU27%&r zBYF181oh}i{r!7CfHEpdgQ!Hq?-acuBt)K7=+d_oy1WEC0LqgApQ;MfZfvT^C4)9j zmC&qX$|VCDM-$k+HYW3yW%x<2YdE)Qo~-Tw1hHQ8A**?%BN3c)#&8vRjg_GY9LXbL zG84K5(VDhT&^$!Z5jYF69=sDm4GDfESh1_*W*7!ah_Ln#pqK|h!tkw3Z+yx@7qvIp z_oPu8e45ZEKa@pAzNq{Y6%Y^d@WScOP3>P#TG8pwOhj5U8!cRF7q9FbANz~Wt(QW7 zuN5M#>2CspCSbYFvXBSIgnqI)6J?~HfkGx74_yk1$o@cWf7RRK@V9m|4s({vG&XJ|4>J8~U@}5d>3c@c({QL$4s07b82vW04WobSlTq#S>cIAm}FL&Ei zpr7JBXr$#&7BIi}kD}&0> zS1jCR0GpDEM%_2oD)!yRZ*N(1)-jv=d2)B)HEzIBi=@NRP@9Gn*^&q&}4;M&$*;Zco7o!2gH;ViKXV)L^vr+{O(kr&BFoHm{pEsl^ZVCP;-W8G0e z@4-uh!U51`3h3nL@p{MOF_N&j=$4PG{(9$m0({?h|K4_o9;669uTM&2#n~m3xO@5l zV7Lv)E6~?W#eOZd#}`?hlwQE-1WybR4(ziL!_zeprxgFq&wUd!9sugNtu{V`RqGwk=K1PT~2twI`ipIXv3GTO>E_yTYLafuc8=Fo6N$7 zDm)fs&p|+3CTzhCt~NF^$@oB_hUk$Cz=zGr8%1TO&=slO<6NcpnWaxz+Vp@-ur1)p z3QWfJzjP^J@eUlj8zGG(OMRA=A?y(LR_4VgfTA?@*F1fg$rb~gu^AAr$gu9>Jp~Rw_}{_l5%-`04dsucbkMF${$~gG{c?|TtciqR8*FVp39Sgl{yc4IQ{Z9f5>h&Ds|QfJg%fUNNJKK& z8Aw9@UI!_I8E!($YDXbWF*lHK%v!{DM&v&rE#s0lI%LO)`hpZXD(aq>{l$q@4Pcp5 z0ugQPyDnZ{Ma+f~X*alHh3X0bjGB_vi@vf(wR=;Sf#98r>`SbE=y}_(TgmUc7X{^R zG{GZ``vG{qHuCtkf?d41YrN9qaiwh8q2dtYYvSkvL@o*+TxzcCmB6g|8I^6+>^_`` zZM@-Y)gIb@E}po)DTiP&z73JZ|+(-6T4I3XASz?+zEAKN!|Lz&#Zb z>EXBEAMSFG?(o6c(+RVlmW67x`5GqQ=5#^6(}uz6A* zPxSh-+&`<^Jw@UQdIpi%uM{%;GLC=LD+?I$AmXst|`%0K>z8gW0k8oYyTt+mfv+O;L#m=P}5E z)oSh=@mf_);%Bl5!zG=w!1F@EFXYAxuly=_G*&6anAZ2uFu_7L3ndCqiCtCOpxjpe z>_jrFKVXy1TbxqBz_@U8RRkB03XfU>BQA9vkMr%zZ@@3%mwCZryOqUTQ#vnLJJg#a zvv#H=%=6YP&bes-CTGE#m!B(~h zp!vms6<8x^t@a0)xA1cwS=B3eO?6b+t&x{(kx&&s>T*e_96andg)Od3U28f_rsJFC zvs(KWq`R&idKADCTW*U6EIjyGr4PZWam|g9k%uC##cyW-ob!ZMyNcryvea7Y2yQ+# zrmM7UNhO#A#djG2$6OmO8HcT>g|V^}`JzVQX|*M(lmVnvNNDJPQVL|8WA{~*=JgX+ z)f2#is)t1J%x`2uu@0DMNcGxp)lsWh-}sP*g6NNOVjqr z^x!D7#9R^qJ2#c-jrI!AgojJ@LAmc`jCIRK17&u`#~}K3NTFMIcgG_7 zc^C&3;_Z@Bgnvboz{2<7C{$@wBiBx*7Jroki{3T>vhGsni9?zWVAO6?4bZ&D^W4O> z^eCL%M_2Lg2q&@!oNkAv5>k?ZbZ>{~>mwrsTzD@|c{0)nV)!%ozK33LTbnf-En(6? zv5ywm4bg7zE2>84?uurgwZR?Z5j144DWL`;fHvddRJtxdS&-dO{DztyDfRqVZ+j+X z`hvm$>&$u^R_`#s@~sF-*0IjlBFU4mW@wep8e}n?68G|AT4w4yme=eWHX-{r!A;LE zxfBKSn{z?Ir-yQ~Sqhs z{$AH&h2AON8Lh3PE2Sbp_B0iCiMZ zb!VbG@J0);gBR}>_%HE+FW1mdn@z@;HPFI$vaeOZ-*3N{(ciU`WuCZw)~EZ>!)LvD zq8}UiW!I00$8bBn1O@qrJner`H~~HEO&8b~pNnD77oa#ET@2~IJD$(%A@rq@F5=fP z6~l?vxb+Yf^&w(}whlkt9EhcEq2kepb1{V!Vhzu{^IjQEQKkw^EOe#WZ*`k_az^Ir z825nBUAX6=jdZaW5p)6LYbzMDOZBDxpMDl4--~g&FYB1;u=tvf;C-O&IRJvU%B}P6 z+=hD&2lc6fhRxOOtxbkwt4;b=#!7tca8+1@&Xb(-p@!@q14w48T{||@dA;DxZX>jD zkn{)lSNMXJK<~Nv%N0tfAj^G}U`)$V(2V^j&qlOK492XZ6s)VlvXyOxA@ORpg{je+ zJxyctl&YV+W&GVuos@=w?|>N>*Z^zKAB%5zon3AG+-%i;oqTkvZ`gz&-4IB~_Wy=_y69_jXltD_)Uk;$&+y%7iREXciLm9je+P)al%@7!r>FHWQN;*jwB1fhWyNr| z%vpwkbh6G->14A&0b*ZtbC~Y7hk&rgUAc;>@m)Prq(*C_X@i{O$F4ty+DvZgTXB5& zgI?svk%M$o{^(vnSGO4r#%`hcTfcP}?!GRUuOQWVpV@pMj`b{NEw3h(KcBa6omXx- zwQkaOlp2#R<9<2cQv#H|(nF`((<)BiZm;$m?hhW~6N3*s{W#yYKuEB)h92QefT z|BcNdlo+A-&(Bg);_;u&P)TB#@jn}NpoGLfZq+41!jHQB|)uNM}{5KsHyJXIPZY`r;lHLENiwcz7`sZi+Tk`imeJ7lH$&Y_H zD)yG-=fAPo$C6iE|AmDmlH&UpLxw^sgZ+QDv|~M~^Zy!)`clgOc~Kik$^DDqWiG}2 zZvk3Tq)h(JhL-RvaijtNAlP&= z>FIxqXKf<=1^-{Kjk7c-_kXR@-_jRI|Fu%Oq$~dU34cf%L;q(h1DARF7bBlvhV9?m zu87Dm5dYT;V=lAx?^(|6WPTC+&z1(PM1Y!B5hH^S(2;S#8Aa+k)`0ty23GsK+ONeS z5)ZOn^BUWRtA}_?#MQltjY$mVV5YhD2B7e$$e{gTDXB6lwdW`*@2ch-cea#=qU&mL zKL~4EmNtFdU_U#gwmfAquHnJt`E+a=ke0@&5^C`AJ}osAOFm7mEa^)6k${>+k;Ez> z;LyGeux!nA8~>_i(apWp6Mq3>f~86lQc={jp@p!}oeft<#}hQ9|G>JuL!;Z8zyB&C zpN5f7doXpDA1CW7n{Uoqa`=p)FHQetWns6x*C=%_J6YDuV`KhMuH~0c*%$eBAm1gBFlf3^S6*!_kSF#cSfN^Lw@ zHoKGM%Q$$`JJ)y`Ph(K9H`w2sTn8@@-%nAifL%hd#?C zR4?0Ij>Ca6XEF;-Ku!e%-@^0NvAEWv7zn2zGDh(S74#gpT@@TUiZxDPf#qw(*etaW zfS4N9M1*g&wRc5+{i=Sb_2LNDnp@XT(|HKTw)C>zhI8x4cy`KzYU)?_gX2SDO*SrH zof<;J?~`Ks!JSY)D#+SquEW43yNE#nnA zcf@Q~k>gb*wF<@dgxCC{exf5x@y=sPfW%TsEKYwQd|gB;Y!S>M@tdbY`W+H5qN|c~ zb|}eJq!m&&@LJ|n5Op%04iukNN)*&#OLyum?B3}nNd&AAZ0lasBx(LcBvj#4;sfIp zDk&ZkC94`HN7IBM@!S31MbA-LwhQL%(2?HuTiGNn#)F$-?edqaX3h;y8{|g^01&D8 zsWBO&7`VAtV?8&@1Po$SJ6v;*VWyZP0XnBwNPOQqVc0T!AF#YVl*B zLzr6Vnn8kG4g8o4-c!c}>#z(+vofH?Eb&|yR+a6jnEf-Cmfqw4)ER4DWj`4DK`MKT|NCp=Gf1fuxu{kSQ z+A~n7N}dG^K=U&zh(Yy_j`WiA-;lHig~xW4||))mz+}eZGoatQ9PBiU*7N z1f+*r_oy#8qmW`Quql#Q6p-OIYVvKjFn_>R7c|DUBcTN3M;Jx>M^v5*hWP{(C66qR zN_-%`DlRr8Gio(vXvt1%;MC>ov>H?^%#Unx+}Mv_Ic(k6wFPr=++v=w8%^Tog}4jegl4_@tM5nKICJk~Yzs9MPY{kVy~+;8P42hrdaLYE}he z&j=U`FYFw}_lZwu6OYe`rk0KtKfH8~PLiGRF{c@^AOmwuUkX5@BCX?Gn=WUO9z^0^KEbz+ide~4bbm+fgif>0CaidALPU? zm9Z=QGf=?`liYm0u-N1^9TmW&3i^Hid%Z0PjGg9oMWJ9eImRFi9g_pjv9m>^dfT zZ!VfnR_`>$S-V>$QROHWPN+(3m|`?&Ppp#Dr+{{yCx(e*3Zm1N;PaXStUGF$xo$B?DY#K!aJ~0Y2v9h>Tvs8VxVae7{c9p82kGpiMx6 zEUBn0(vw?Ht4Q!V;DvQ6lT1u!{POC)T~XtbQVL>JuDya{6VxD00#GabC+V4cEKF~0 zBU4-qeTi^L@H+ebhSGAEF~ZY%O%1_P6UB1N zRjDnoaCqbl`)K{1U9TB)e+HJOvPLo2_)uNyk*~{!+3v`6GJbS{;yq!J&gJxc+v#2{iUn zSr-^%c8l%E=n3Xb1M&eg_IR@>rav7SCp+rIYd99C!l`9z+n;oXHU|louhvReu^kEX zpYiqgWH9vHy&yzI#;4R&*jB?jF942(N6L-&5QCczf+n%E=f=?G&pcmSlB4f)F%Qg& zmNyEngFH!`@)g#44e3ay?9RGs3DOP`*SD#MfIFmY#^7vMIbdxCRM_e&;Mrm!tv_RqMub718WJ`DKrOyYqB{#n0 zC!t(?KiffUKOnsn6KzO~k_7n$Ddt3XeRIMzQzdTEDN4Jfah^gOf)h;3PiTxJuc_+q zpv{{_FC@A#(?94{ifXqw!+=9d(TIcK1vnMi1fCdnzdbTvCWSC+1}G8h1TJ79rY0LZ z#iIkQw z5m7!+yMuwtBAb{BmH-jiLVKpaKU&n2&4aaF)2k30&Mww9av?V{7GDLs!?g44uHzQh z<^mn(sZlPv^S-+CP7}c~!>;{@FKxwnOXt_-JcDO0)auZ~3z=0vY~%Snvs4u~EE01X zoRWh#nUOcSlr+-6@MgEN#kjXP!(7pxU(njzk1P26*0<=lj{y4ecnP@+W$K;{OH09? zgQ`4Al5&u4{zuYub(n>*Lj_ zSLXEB{_&N23ug=WW8(DD`SlRhyo2k>Kt*z%Y5tFDfOkW7-nhr{s)zfqPN_!18{qLd zXPl7lX|db0_TJ3h0z0G}PUZ2~xVZzaPxM1x;WqJs^e!k$@GVSV8kO8TsT0y05`i4@ zEH5RGzx>vvKtF(CD%IONX}H^SIrlY2?wlwswMBCxusjVy2`X{pI5AuNzTjfY;$1lOhp8tB8}y?u_o)b5 z!A#)6DJE>l8Hr2?doV!MZ9geV>_zz#&%2?Qk3FL-htaoV8GL!zb*h^IgZaUX zb8v;fItrv*c5eUGnEd#R&zFAC43`dL`a&vvZ+zEboKbS|8$*cNA|3eed)(N)}i z)8n@r&;nJ@u&R>cdu_w~fY^{r7Ybh;2*Uy?h-m-hqeCva1_{+$JxrEyg!gie- zaR6YA2SvO^vfc!bJiA7Z^1A$N?c|s3c`AlF4g3ppIe_#_<(yElna4mP&00o}IL#YR z6#0n^t++ITQw2mOQS#f?0-*7k>jQ%xbrA=v08Mx1{>6D_i1}UasuZO^s^;?Z!IK&T zOglnyzvKYrcNA4-4pyCp^}Z)nodZ`E(L^Opzv;ZsX}NEld>uR{YDA|@=V{seN>(50 zInW^X;LNk}w;r~PL$0N%?@1J_Ln_e1xiB<=28C-psD~}y$xhT?A>jBz!dOtlhZ$&) zI(P5$5CjBtdLjlW18VG1#)Q)y+hfO9soYE3Fh^Ghe&1S-EmB=biWk`1T6pZ6JniE~ z9KC}Y{b*W|O_Zy_`N|#bt{dc6aVefvE}r$&jQ5#4m?hM!+)ur_LZcD85@D@VhG`p?>HGUyH%<*Yb;f-6y9m z?Y!;k_9l6GHbPLmLQ6@~H$1qOB)+dJv4i>M$w zar9Onieb?Jja*iolFTmwGJih@{e{1eOze`Fx}~xpNydsxo3OifC>{W{RH? zc}{uLM98AJ2dGfq__!1Q15a0&Ymt$7a6Zv6O4<~WP#<@tyqubF zvvxv#DvB)N^}Ly3LWRdQ6B$*MoHzl51eg-Q)$hAd&1=A@mK$5L78(_c z#+|ulEU-eWDY6=x6;zJE-2*oYZ~_ehxFIXl+vBFP08o*M!F>#!T~3MC(4d*tWtKjzl)7%5!*OKE)QSJ7w825?XT6-qRN(ncJj@Q_>;T5w$fQ` z-kdMqX7yY9aSes%pS$_#fmzGoGzwvc_Spv*`P91Oy!{a*78pNePI2R_XIn?3e5khz zBGa#}A#4$=g=l3kJ}a50VWKQwC>&}!#}q}81vIfISY~AY;DUv$mri$!0R~^D&gEgp zk1T_ShDYDpU>}JT0{UrprMB{RB91qqB->BKyABJ-!MX=dD-8Hu&@zI5R(l1IyKhKJkt1f(B z0zl;u@*u(|C9Aqg z;|v4#plgN~vGI7!R-LMIjPLZBM}PY1H+v>fakXL|3-3J)<5dw({~&g}UI&Mycm&ct zhf^KlX2ozMlF#u{+0%&`4$RIkeF-@k6yr-ZC+W+XCB}iMvyvt{lr|ZlyCV_e3b463 z9$B2nLk3jfjU{lmo0TN3>IVt2S3ZRcu%|n6{Ozdkp_YQ-m5|TjAUUK z-Z^uK`mvTZMSx+Gx!w+|>i;4}^nTHK4sxozbJMnWdM|-Lj|F zL^lGA5KcEESs${iitUd}j7%)N47hpcBt&$pi53@jXg{FVp7L>`7emyhMeh>GoR(-g zBlCONJuqcl?XC!)bB=*ygDlk$VxDjanGkPsa)K+0B6wurZk!;<$u=d)ot}0BBH+A; zodu=Gv*kHTL^S-g9K61)rWY{n2+wdbvvG|KXN#_`PRLi64C{Tgl_)T#1q{ZN*>kYv za>hn$a8kRc&j4r zMqLxOGWaE)GMDN?wq>QbRbN{r)>wA0WkmrD?tLkGY=M>T-!&C9WT*#ML0AsPBYh%* zFX3OmE}MkYd$x1;XENve0WbpU&8^8)t8NgBjylUo$^k@fMAL4}r{}h1Fr8;_QjVHV z36==zxC-tPCM|F@S3MVRwTaN+UxsqOTQ$^IGKFG!qTBUGRvm!2!gNqc3`>0lr~Lpk z4cnMr%)1DId7ltBN#pJ6Jp{HRQ~t6|+kDiQ?vc`vzWH-PBC668fUAf@;?#%<`+e5 z&cqjXpSJuM_{I77gtsoO9?!cs`>U}pNp&V@fe4E_XP>>Vmn=s73<^#>_~!tR8f|SC z*0Fr`8!ME89}~rKi{UT?k{M&7}Iah{h;v^vBd_! z2Fb+U_pgfs_Z;-})KvFjO;1&=weF;QfgK7ZCmIPP-Eh|($09RW zuNCw1nID~$bV1{J zA%pE829!LYstiB*{z`y@|5wtTN8OW(6QOmA=&q4tLUGLsQ{lA;XAOq;s@JJlklckgx7SQTVch<-zKxZ$GXQvgyaax?;a3L#7+?#cL7Tr~OY+ zX1{u2Ugap1o3E*$dK|L$8ujV<=}cZ_6lcZ?0IHLkgdG4P3ukL(VX0yq++GP33++8M ztlb0hnHJP?H5|;#SB8rEM28oRFLIDwNp~izj4P{5;WmQa4-X+_a}O`PPm6_Ce>QW# zGuo!^%l>UCl0B}K&ZmwtRstXpWjPBWkw7T?A*ml>dVDGvz(a(LbpAI;<*yKydLc>z zcxdN(Mmd9RPSG9|@HasG`7O+aAQ+t0MThdk0!5M-9;SoM&>jHFV}=QzoES-{)vzsY z7sG-`rd|2PG^==S1s;C_f~D_f7~*}KyA7#9?5KHTVl|h&k5GQ-#Za#yIVU+IX`k z@p%?z61oEB=Q$4R{nV`I{wQ^x1Fb0OkBhmi$bi_{o+u4i1hTHp5F>o-UJYQpfO+qb z$DriAeN+kB<(Y0T0}jywiku@DuM z8w>6sViJmwYf~irHsT*~A#(c% zhvMgd*tY0$`l!YSQn%$qTqOt$K6|_%1q?p4Dtx;SZi!nEB}P^2jLFLMxODPA&hqNQCbW9PSjc(YYI~=N}gY=1jr>=V&8_xCw(Stxkj|< zNH9f&=f(Y{i?I7S6yK<|LjA6iZILu zq##O6PATt4d`%-jXxOsWXyV3)({P;s#*C4`HW$H(8JiDff{JnVD-HuEz5rNU=CRCb zMoE9`5eKg|RYU`RN-8?2?EX@@lLh1U7sxes_&Y+p%{-7I zJit)Amwa~)=pVI;d|~gb^A@!L#WDHt+H5L;4|KvZ{}&p!!UtOpMli{9130}vqez>O2+(B4U{+vx~}KW+<~LB^I>XNXc3>9 z53U)l5I70}7F>&vuFj$q1_t7+U3ZBbcg}Czc^Y120OdbI;hyN4t{A@AN@=R5O@pxa z^}w`3Q9txmVo!U8YTFMzy6DkU5Iiy%jYRksxWAcu$cxd~8mZ|juUt1L^wz_Y>kkLF z#g)y7Ub!S{%P0*F#Un9i`Gj=UU+3s;2Q9akTuDhY)HDR;$H1)s=X+M zvJS#5)f{RT6+6eex0Wnl{vqv=si4}%qyhygyljsE@>DG^uQsW^nh|d+B%u-V%Cu4O zNw`vX_fNZD`Hh}1R(d&k`^=6ZhHg5;3Vo%QIEYp&{1c;2L9Dm>bR;OnB(2-}PX|f-hiq*{IBvdJf!E877aUq;QQV*!k4b#aXZ>AN}1sx01;_g+-Oz)fU$S&-(yuHMh}n#(q{`j zS23Rg_m03Biy@8&T2aZf3X-08V_(v#y#L%2ve4gHD!Pn?Lvt?OlKId*xXZsbzIS$< zUdRc0oHMKVl;^C9utLxA_*%`-vx1lju%$3UL*w_kUr*8Ui0BBid&1=$$I`g$T#VLz zfViYU67e%v0%^o>kDvl^w$z>8{uelKpPKtu&Mfw0R_g8iEHN9fJY74cGWpi)KX zna~+j@8*7BGp35E0$Q;=sm7Owt37T1ent^|0$zR}-wy~)6|kSC#=>tdFXsu07c^1Q z?x^4T+SQP+_#xNDrDgjtKV$W1apyR|K@o~*&gk7@bfKLnsEklPK#J|JZ*QJ2CH9=y z5Zhx1-%)4iE31D>xmwCf<8NJXphUiWg#3q%G;aP#@Nk|@&mSf-gR9ZJfn za?!5Fev;-Q7=|ZiZ6*nRmoCO`0}$O#TxYCGP=O{AdrJ&_KCH9~oWm=BN2+WPh`?bL zy|o#=V_&iH3KEcwr)G}FOsDD;q=q*MVT5Du4IF?@UyLb7g`?Kj5ZoXD#`)}FOgyc> zyaU9-m}nLXn_k*PE#X`{Yd3-9i9-u-DY4_LVn#-!BIjPK%ZTwh#ezdiIa^JrCg^bQ z!@A=-U%@D2p|Q!&y9L~-RsMEF;5)&!R`)t*@(H!Yv=-N{mUPhLv?%VeKW5UgOBJ%< zqG2P!(@O#QN=!S0eO6Ofj(9Xx4vkd~k2c{$&pw=;`{G(%5uv(3vsY zha{cY*uPZpud13-DqA^GqvTds;S|q;AV6#Ne){1cl#8J~M$ul;q(H$*TKu?&j#kLQ zJ*vExAX6vkhezJJ{;{6LJU(XAsH5TH)|V70_7$3@1XW7UyI-0E5V+~{%GEeuW#c>| z`e$VWM27f-79*I@1HzdoHcI)gOj5*tO6nmCBssz&j5th)Ki8DzN?LOpQAo4~EDPAX z)4g0dLOyVsbUFeEm~b8`vYJt_^H(_MS?HDlbuZ1PtTV%xN>`SJ`kPf+o;=J1vE>}$ zupBY)CT&$0^6srKfK?9benD^(sW!mZJ@codRjG3W{NvtP8c6Tg+-f$?P#Q z@R0^&PlQkxZRD~mzVkY$fd+^XQ`nQl^!=S@zPwd~l#vU60zbbp0YmT1&h1Cgk0zCw z;G8=6Jg(oWtw<^g(kL1ZL9w)wUWvuwkUbFSWIM-#|~sk1%%uK=*a0=v^oC}kScN_>U7yX zhS!YzC+Ky6()c{{ky+b*bhT9H;j^ zlUFd4aeqVQ2?_-?+U*HjLyV``FVhWPP1ClA_*I&X)3L5IOWS$+FqlaaO_pp1XXVQQ zFFCE9aY?l6`1QyNdUNacB1wb%$lrQMyUsZ289q7#C_cKfjH3D$jBZ4fw`(Uw4=PUt zG#%X7F7}}`HW2&^ z=rA35E5XjtE;AS^+c@-{`@s@krN$Z;FO?1V(1Q zdZmjiGGp+1W?Z#o=@Y6;G`sfeDm;D#1ZTs6Zhd};q`nJ1FYEQbbJ+Q4=R@0QjLU}z z(tEiPNGoPGXEXaFpre+7!z>%yf;{tUHY;*`a!O;)oDT|aHzQjBGX-cDo>rO{XY;Xa zAaxk-=1@H_S7DzMYW-E}6P+6GgEfR%lq!aZMRBMqdbig*?Yr8S>STrDnIIC?#{qv~73T@7VtgymV?AJ=Zb52a%qJ@3uE}M)x z`21ZR^#_G8}|kFhvSbM+IyJ1a?+e>#58{t_%&Q00|g|u0t6y|qqWWj zt>QIxI_3q;@5b_{AwOyTfvG#TMsSz?x1g8c>A^6m?x0{1vr?q0dDF}wOMD2xqw_YO?@({6^BXnd%;69-`O4; zzTyU?l{(2ga5jJ!o94PkqzEGmTLDH=&}JTdd&;(wrW4&@J?UwN<`$l~7BWdWkX8nD z&as(2rmFw43&|u0@37JkVEdKEdtLmd?{RLpma@$j&u9C3|_GdUn#yNH_T!JR?V zhVyx>>-}p-x*M6vF=+{!VE#RlGyOu&9#dqoNBEDVTaK^BCV>{^@J&7i78~=TSIE|+ zL;m*<4c3X57lW%9P@E1Ghg^RLA2fUIeB&FWl52ffmt#?=gkUAz340e$_{f;n}o~7@y+n$4v^AsN51<3dB$*{ zga?1fR>=&j!PiG%;!6W}JfT(MOI#!&R=FT9ESxzgF(fF%(foVjV06nFfEOXsKpdF9 zGlyLx--VxEy4wVy8sh1IeTjldDi1jUsjS&HI(fcCvzD39ww-c}QCz)aXe z9CwmRrGzWI>WpKZasMj}3eA2eFU!)GM`yB>IoEI@;bR;hoJy!c>oV2TAlD1d6sBSp zj&SBwL0)Jv1o6k3>$*@TXg=9s&KkNvpaEezi@Ra zcqE+0o=oT@z;gtoC=q*K#_RTCjy@M+3K7vg#0 zo$BxGklmlwz-5k@586^`D_I|Gok<1XE`rMD@WKm!0Jlc=&M^maV*XlCdujJRoEk9r z$+`s7rcREFWx+_Px(cJMFs;B5@Q>_)`^H5Sk(`nv>agDkKkk)zB&XLvQ+Erh$o{8S z1jV38nvB<+)R2~drnGGhF|NjFFG#M$qsTF^yH>NN+p3L_-`Bi0p0bB=N z6^iI9K-O@tq!h!FHZ?4gv(HE*e8HK_5G###z0Jk8K?FaIj%598EioK!szowy|2%7> zXv=AF9cz6(W*@D!g_?JHMOg2Qa&eInD^M6SB&*!DBgj!n1}R05PWGa%$|XW*DzJhF z%M9BNcvGN|0N*@q2941Yjs6t}LSoUh$?3S+Dd z1c#@q*th%4v4wzjta4jAeeD-146(SUA{<&DeM<~_Zn92hA|NaG9t>C3Zdn=+oE&uu z$-H}xqHi!{5twToZis-+cu~V_f#*jHM#N?m@7W2%fS0gFiFLf;rz%_qhVd?e1F!N6 zP(ZIiI;T^j&aTapp!d7GK!>$zlSoJQXA6+jK#h&hCPDuQl7D3!q+Eh8m{^OGP0OKZ z-yfx?`=LSW*=qLdgH9zurEb-PR5PI_E@Y^8J_*}GL?FP%hPCeKNmv*~0l#GoY|&s5lXsWt6;W z?8;5w^^Zm6YsLH7C4z>dLv>DuHz;gQuiR#-f?_nf+&F-?TeBeL{X?w+U91iOSrNF$ zsT)6uP~it`!(6u1Po7%d$1`!9A^_)%;ij}UAP7NcW7z#wj#)bXH=x7wuUpv_`PfCt z5p4#SD>s$e9#IgKo3=+cT&6=O83(5ovN;Dc_-l;75{6%9#xiBE;&>&QH%Tuc_0SDd zZ~d8DsIp+S)}>qU?45UR$7>8gvu@<0rG#zusvxLu8N;oVTNr13%h+vUp6+ran%=m~ zlB%H-d2t%pJt+4)xm1I&*iL@HWyzA&?FlsO^odMn3WsgN_S$8=e{wn zNKE=ppT9DJlLfAT7=5mG;@CcAxJ|51K`}?ZwVKahCd~P|S?Q^03y|!Jg$E(z=M^Pa znMYRx>osx?0zWW`+zd_WW+mss@TQ3KsKh^+k)wB}D2N;B+zyOlgs3SZfqR`=8R%T% z6|^Q!&UHkdHa(<5SGNzSq7pxWtk0^r*^Dgb$duHl1fG!YZp0VFjChUR#;%N8B4d@| zuk6f;6j?}py$5M1Oj^xXRxxYhwZ9_uM?=q(z*OLjw6&a;A~{{EPy`egi%f85TjCWd z(3JB{H<=>b+qN#Ji%GH#CaeV{Pt$8jbrz{x$_&0zxYAZ++BN}_!qQnn1=PM9Vkioi z)`TI#aC94uI$2ZlxjgI-V+b^p+ivinIv><;k8Jkt=JWbtswrtD=!$7w>|YU#aCo#? zR}id3#@ngbZ})iGogcU)=Bs47_Tq|K6Aewp(!GPTIWM=06yC+R*Qw=o8*#DH=uN33JoqcVQ&D!H=9|AG!Uos_N(jy{TQd#i$cvT4xlX=*Vm-|QnQEr-El7NenzJ4 zBWe9M6|sH?Wa%~(AEsGngn|+&F|3p;yAw%8rym@y&Y;O{UJ{;==UK@UMOMq3I^!A` zXiQeSPV};_%zszB(!*sM`5#GLJAn26DenhVnCQ?pI@JSGB7b6|2?CHvzR$D~E~yN- zsktf0X+LloPF$^}i1&+2C%i3o^fsig#!O0oZ^WDolP9|m$C7T!m+m>B8}Y6DvsjUt zsf%X4wgv47L?J2)KmBTg-h!Qzh^R~&7DK%*08T?dzb5qpA9Yb|Ubd|(I>CP~%w7UC znooy#i~x}O+`mh(<2it?3sj3&;C(j9%o8)r{(M{=pehv@Ne_0F1Ow`$MAw31)BhVh zyB#71tT7f;48uK{*-B$C-aZHLJM*e}2)IWOnkoTIXs!aSZKknu&Z&v) zLV+oZGbje`O8Aw_w;D=?Bi?G<&*V9f08XI6I|*Qv9{eJIQ@lgvuf(6YM2XDd#2#~e zxUQsf%*>ioGfS_HNHkJ=2c8DsV}*3Eaw8NC9wT^(p4>T@09Ubd)YS1sWZrnn<7l(W zhsjXjTosP8IJC%Ckb7oB>5q;kT(nfOVeyJ-qY&=fWudL9%fXBGwO>d#={EFpNZ>tr z9R{>IHMz2e9Up-AE@I4D<><3kRzNrL(M!Yw_oiX^$6b19Vi49A_Hig%Z>nNf6dv^z zdbyI~KXlq7PE`CE{@JAgqt{N=?~T`SZ&*oEhlMFsQbt9uwqfu9vLoz za~8f`niNC_v&g^velKVLUZfnmiFJH-p_kySOA+XxGmGtVYpexH2|L2`u!n+s3&2AM zV{pQ7a<5&W1$w7-YE+;%Ovjvd83|1U*R++Em(No;a&SRTdubcS%x{n8XK|lXMy0v3 zJ7S0R^%$g?De$=@pjIm|-OpxWPhRARmlx6R5l(PQ1}e##OajXgm$B|*W=8-4Dfv_6*U zz;cnwmp;rU4@4rUeP(=J`uvNg;d5RTtiF2myQb3IlIMD-R8giJ?eWd41#mdDy=fcf zN%BIEDIMy`?`pE*$`IbNMqCMw$<}hAK;hbQ5f0*7Y3F_-czw~F-CCdj(tW-=1nC9b z$!kpBbfE3-$zc<+lylDJsUrT!U9b+h^H8&`y~n=L#jWtcjSj)RQmZf=_lwscGMAoV zj1Wsa{8aJR(HJCIOj9t6FW}T7k8?bkutQOTShk#+u!DCiT<Z>Y zNs{H^xCs0cw>r7CMvVa7#bF}Ei6(_4W)Tv#b!4sEs^!Z{a#-{aqjo)X-r035_($>tYJf?A7FSxqS~eZj z1j{JB6J_}(u!VRD*0!DX3g@B*R>uf#dQYC-plu-bqDGr2V-PpoeL^UHI$ZoI+SDr3 zAXZxb>+x0wR=$Y~-0W^kpSw1zJBLFdZ&?s7xUj;?*fq2(k{#;xE?+-gKmH;sR(Ssv z!L>%h)Yd4KvBT)~89+O@v+p74cT6}!u(iVI_8rx1v)$knlv2}Ia@?c>?vPsu&I#y7 zZX?}?<>Ju_FpFI-EMpCMn}lc|#`$vMBFp0Oia3)figoNwIWstY<8>Al6JlQkNQsjbY^*9YN6~I*i;w(8@7A2Y^RmEhq zQ^M5dd_wV*$M=s>EwWiNzRwlWoY_BD-_|wV{uP>5Z2ZL)!9>6N4Bsd<+No+c?6a0G z6VX8Xf(O+mxK9YaF^mQ9Z>ZFt&&a{19Pit@27Rp^uP&Lo9`gH}qg{-ceNo5P*#t#K zlIMHs&x=B20R2S6hgztDVp^y*p*{-$Q;%Xa(=KTxnv3XipO6F5_AUr7l^j^72awXz6UVuKYwE-|80s z^{9UhYl;}q=-kY&F{eL->A zt(Vhi>GV`v(%$M_;}8^W*sRu5Q)z$U$KDJA;Mtg5RMTEuAD1VP$+$YKDsG~@G-l%N zMfbfn-7?Uux-wy!@77;_YRn_g_Pw_3#>m3I(m|PtT}HFMHm6{U)!=&Gmp7Us??Q0p)O2XYJ1*(#Pr29Dl+7a-h#l4M@%gCzhWtO2D>pW# zFh?m35Rmfi|ErwRQ7^6WA2<@dRhkyiTsB)zv&W32VJ%u4(6purL}Ts@ zN2Fp&9-rqR?3CliioKp6<_`*UwmhABzIk4L0LN|{b=NlAiwo2Hbi0aMVYa9k6(RM5 zUV;h{I`so7=wk7Kn56Ph)h<2S^Cwu2*83JsZNPL{Iyz0J>OXcKIuIPhiTEZe5*Ume z|H64%Mx+$)#c6Xr*;gaqN~bf(`X<(^ zmhChh_)49>o=$+l=~w3N5wDWBupXt><;hTW>rE@0Fx7po-Yi}|J_HU%EYaZ0#$_m+ zA87+HK^)^*BC_RJutvsle8^wVgJYTASW61hJ8Xdr?Djt783 z{bh2|lwu+bvwb$+K&@{+HSDxkeAivH=^6}|B+o|S3_B`Ro+Z{Aw{Q`;N#F0McIM0Y zr~B^ByH`@3x}f`DFDqX)#Sy|)#a+`QyQ8>|8#`~5TG*FL09DKZQ<)T~f&(|U3tfmz zuWLQqEtZQUMs(hSQ|P zNi0Dm2xBAr`h0U`RO}%#uhOA>SwKID`;%V9#ND<8a1u<}1q*~oWY>&Rh>w`(d}}$| zg%1u9A{JEDmH*Zf66V^rw%Of-+$D}q{9vyWmNSxXFzz1(PhuOutX3{uM9YP#!>m_Q zVf@z4A29&474$xv8>1HS=8}2`$ApCE$7XWRsZG1Be^qopN{VLx%;hS@P3@-MPfj*A zPBNVIs>Q|efBY|)A?R#K!aphS!TeJuC4M0H^x^_uh4WUBNA%ZiV6Sb z6-I|?OH+18`gVF~yRi{)52@R-TAmEUw=Y>QsT>LF85jGN)pbaG5#Q+ioU>k$_}5b* z+vAX~_3Rz*-cIclAm3G9?T+Vu;Uu;^(l=D`1K@S66(lyQ3sE{C*744&*x5 zLkRl9)!RG!+R?n0=KHmwDyO~*m8vvz0;Q2trg*%!L7H&lTMuRHrbt~IquZSJjTMtO zrjY+tq7M3m1j_zoKd#v0_!_ZeE4dZnNE@*1b*1h8ovVn{V1hGDVpw>4>2*)3gU-A? z9yQ$mCDln%ZsR{7x;M@{7rBd!+vPfe9cn z6r~i$(+wKs>En2Eq|%inA#E9WCN{j`m?%MvCS;oaEaY zFC5;ts=4F<=WbjX^Rk zkngEbDxT(Mw`}2}7Iq$FE|Q2`n;t-moD<(mP|#-%9n!4iMI{^fFaR1UhWx^TueEN|A8m`dPj%p2Q;AK_?d`Fsc*Wx}2 zLbdx=S5WcKoHgJACmL7oKPM$j`7*`yYJo85%gOgCM2JGwMYW4OXx~k1fnqg})W8rv z>Wh@U+jLOzTHKU&n!r^!7%gbDO5*Oz{F<+%O*|}`7sc-usv0;f{2qq1P?Ty&FW02EkA7||O zMVKuDeXw&B#-{_%*$42i8dFM!S!8_#3ad3?Pv$dau{l37YBROxg*;w00ocN6eBHhZ z3Tf{;dj}NxSEU$y03nVy^}igUdovNK=dPe95gN?l8@N0Qq+mEB*3C|ioi>3WN>Zu{ zV>pBxqosi3?F%MbJ<#sPV<@0kpZ(umgU%Fq(1q8V3P)cC;3~rLdzbnQV)Q7CQ)U@6 zm2kdct>oZNSgS@`TE{P(qTy-p4mq^QpU8Wt$=yjDKIJp+5|~jx_b8{9UIczRj?p5M zp@ju7QZM@a%Xzn9(_*n@)WQx!X87IhlH1`(rb&2@2s64e7l;bR&}bQt$TmypCV_w`E>o zR?l9GsBArN)}0P{tBPTE4qoNvA;mJb`-vl9k0u9DOz_9eXEDC`2^yC#kG5G}+cPf^ zwm-O^io_O)5}d<7Y&_OZP=Q;27FHl6t)>nR>wb0 zv5D;PRMP!rT^c z%dOQWW-Ixf^sp^!_$NAwq;O{VJ2j;)1vWH!w~F4v3h(c^y4oj#*0T$=O0g1RUx++r5q`Ov{?S77E~#ay*kG|d<{=w;b;^3F z^e#IvnPmKGutbBn3(;i*5fLyX!YTlA^!1F2b{vo@Ie*z2s1t3XU?Xl9kwvcjYJvV{hFQfkhslt;$OGbF}or z9BcSvcO%wRs0w!aPpHUg?`LpegJ%#qS7YMj>_U3g1nP>X)MWoR08sSEziXDtWUvBD z)1q$r{gA4)TxOPp6YfGtAwYBT;!E}f&u>m1f$Wu*JmyWy8vy6^8#d+ zZs*{z3z}{!3hMtiP*E+cN$eC>OA<>bMakxmkax&s2Ljog-X_7$@sjry)hO=8ix)3# znZXgl^74(m>aAZqI$&!+q7JuscjV1CM6da#c1g<8NgcBfX2GSBJ43x%-FNrE@gX#u z3b4$RQRkj>X?r`}Szl`Lr0q5|(!#xkSuUhl8;A}p*BuSR~DVt`FhMI%_WkOvJ6|sMvg%mEnl)f4)odVwdA*+ z714Z-mM`igQZ-K{GFiS@KDa{3V@*QQoOlG6ue=#LM8-7E7#i41C&pLS$udO@UH@7iFpv@@xZcX zYTG>zOtUUiHSookZGy4$il#03{_wxBK#0G6Pr;v+L-owY^hj*E4nZwDV96uDO4MTa zSec!-1_7S}1e(I+vBrGEUHTWasRUzN%uX$9zc>xttpyjg8Xu20=>qm1rLI%@<|;O} z0(~kli7%EmtHDL3OMN~yz~(!w`hE?t#KfNnA(!cB{Z;u53+2!TmYBNj_1)drzg3}% zaOAXxikZG48? zC!^CX$A)Kh;q=H|?a*aAuynyn8a#ofUaK6UCi2x@lOs@J1rZgFm{hQfY{)@J6cgA! zufl`Bivf)oI8QN`u-l{TbitG>f@s>yM|r7yBR3hAV*~mu9MzyI&HGwYW^KrMyp=Y5H$BC2a8 z3IWEnuS@)C%nH1~0;^a_j5uPNzT}n^&UxZ9F#-!rMR@-rYfKhM>X*kqtPl2;0TKQB zorA{Ekhvc0+(EH1kC)TKdPhjfiYMU$Tkvl)v!c>X3zREG^o07| z)34`k;~VJz(q%_^2Ofn8KtRLk|IZ(8t1Pta|Bu%#6H%5N{eM}oAyQe||FU5B^sH~F96 ziHMxef11K#9&*9|k)utA$+3|ApI<6ywHzB@Ujixg=9wzK_Nu7!EvwTek@v3|>tIdO z`VZ7ZC5Xa5!L~pI`KHHqAlis1D;~)JbL;c-(OvbOtTD<>XQ{O%>-UaIV+;LO0bQl$ zeg97>E%h=Vhky0XI$~|9mqD}6_AL<@SPe-R$i(xw@~p{*->@;QX`0%~CetwzMSv0@ zI9jY4pmcx+okeX47pH}LEFeZ4NMsq^@aq2vWv?b|sy-)&Gu24N9)rJEXG5`7h3Ydj zo(HSH^HLA<_spwfc3qLf^+_C4DgFa><`V5b*LsM(*IUZiZ@f`M&f(?v=&={Zc0r9~ z@4EPgZ%QM?MKai0@>HWgs?K+TNxKf{SRYLHdhreb<1Z3O%oLEyqt2hMGDr8&DlD&&~Js7?yHJh-)#xZjX;%oggk z$Yy35?W#2Lu`c?aiY!s75*=NnhLfnkL`9*x=rE7U!Vw39CwlmQ0@tx-BQKK!6cH=j+%2L z8*}{aQyomuhkr?zd+k`&?28ZpaG}{l3(+!?z#`dmRTH5<@$9v1rF-Lp9?bf5=Q@zW z{FY7fqMXV|<%ejLg*pDx-GMj;P<)|%?Yrv%QKL$_n8H3*-_&8NO}f-iv$mlGBi6a= z)kSjz_?pL^&YggF7DgVSekYJ&@ z;n}Qv)ywuoVzsT$e0cl=>;xhyl&@hHa=U`iW(@o2EnQta3Zg?Ev}ALrr=}J*;4^HB zO3fbG%%SxJs7yv(0Q`Z!Wf&%3zhXYQKMb*VZXvc#;44|L)*}@+!R=-1hNw@nWx!$6 zW!SLci-bq&w_g;NINN%^+j7gI&I4zh#J(3HZ#aK7C&oOjyNk^NWQtjMB&?Nw8L^i8 zvv)%kaSKUWHL0OuoZS|`En&R(^J{&_+u=K#tP0Y{uA|OB3{K4y7{W9>Cy{lDoP!fX zEC>o~54T5U0aG^dIZ?NJIpb9(wgsWf|})K-=cdL==0-!H4!+CI{a{0 z^v2MI$W6kR3zQB6e#=r+GGueRY~9YEcsaYdt6^Upez9+CXnwW0rhf$BDm$7A=ui&# ze4n-09HYK}n0uXX=xMs$w^!m18l|C(LG4`c}xztfYFRr0P zZsAIhV31r}o}K~l1Nk6J3Sztik8|=UEnUCRU6Rjwyq!UG+#ba(SEFw?#cBocU(3>s zUahHFJn8{BPeTz6D;GMP$UmI?CWmuH_|rJ)5w*nizZCSlGiAj$?eXEc>8vpT+aCLq z{8}q=9#&C+f76|>W?a2IU61CaY)_lo=4WDE{wjo8+4$Ksd0w5jl`a=rWppPz+(x!wF5B$aj2 z>ixOx2_U0BQ%^GJ9)jw-&ub5W79sej(?I*&$ zcQ)ryCsHEMBvFD%*y>$e(x`?UYu$?5s4>qQZoTIi#t?VCmyyi&r}05R+RntB&b=2; zm{?_7UjJEpfX+lijVsg6j2No<)QFH!-;k0qpvp5fo6Io`%u&Y2&i6#_cam;!j=iok zhRApE#&Mqh8l{zJ;#HD9A7CZ8P`RGql;Up6OzN*j70tVW@vvOT^*V z&6G$5dNd8sL`?%#Yo*eF^jpZ=6}LWmd!L(a99hoy1Nk>;We3ygh4)GM(!9}%)UQMD z>*l29kMs6hf$ba+frnO#1KEcs_Z(yC`T1?FFh_1o`2ZXYfSDXe+wC>~ZG-`4S2s8# zEH%XV-?4jg9WYcmhr8Wi8_tVocUw18Sr8y&cgnIP3kSfjE*5J5e-x|#NG6Q>IK{(B zI46um{lJOPKdomig^uw<*CCQWOqdY6&XchK7;GT)orc`iukFYa=(Va9<2!APZ3i!y2su*^VNb;Z635Lnu;{IRZi@N=M+MRUT>Q3g&8<1W;d0zDZdfjufEa7 z_}1i|i}3!-pLQC+TnI>nsO}xC=VnY#*i=Mh_V|fBd&|HrytTOo!@=0ZwrG5l!5l@; z&8vBTGvj9KiG9c%2oqXh)trP5R}EV_5o2SNf4Lvqf@xuR$ILf__o*(JEHIOb4VcK{ z#DSY20mX|Zk0bZMTuGWV`Bt)8D2v2&jkyiIsYg zDaHI9Jd$$)*mQ>ndVKvh&4nVzbTU|Cc3Wr!NU(U3*aDR)&DtYCNX6A|4_pdNT^^+X zeBkZ$^eJ#+69^fdyn|J~mTlGt7$U@I{a1`moaCi{EA?XH~IPS-i*j{)RKxuE6M0boN3}(BD z_)X5gyMJRN01Sh&)X9-(hy}Z0WnO}rzj^qHI_zqnl}AHH?t{rnPwH4^LSrp8{$#@p z9QK9Tz8J8_(rU1^;bxO@nRghgi&iFGKuR7$mG4>u8BL>5h> z+1)h&dMiWno#@ftFuqE2D9BIaBcBK?K4h>?H6Y~I>wqb&`rzE`a>&RKmk{V!CWZ?v zg}sDHYxAG(iVwpWITy5I<=>W#WFy1R*Ptm|QI`rNj2151v8v5s#LLi-WT)R0IjK^sM5Gg77&^u5GlO69gf?oNKpZhdGYHRQgE4=uvpaD*2i8XEppj z--j0!`1CN9Hzqz*WazGH@-KbxSjAg%;WLZra`Yu#>sX`|I(kyD-pY%wX-Fl)$ej6Tm@p5jj0bE%koyWMn!Gg(;%$_mL_iRSFS46+|O?I}F6YZnQBT4Pdm) z)kQ1Ltzm8|sz9U%JDm>AQ>ISj}{zWIOt7+X3Ku0*XKXD((=~r_M;AKbqEg6i5pqhmKGuk2$&;z0F>C*n1AB-eaeGt`Qq+Gc{!Z)w)|h#gr!( z4)2cX>od8KTRJ&Oj^1jT82to5!ZgG+4zj!l=yRa<*Z;@WIYnm@E^RwbCZ5=~HL)kQ zZQIrx+qRR5%{NXa$;7s8+kf`n2me~%$+Nm^_3A$Adb+Ewy6@-1a^`}8i%%!#;fnP5 z$DLm+#MQk1Kd8Zo54~o658f7aw0LzHkPXrd4YV{>As1G|283KEcP(8+D`C(Dc71mQ z%Wp>R2x|pqBdbpR8y|P5Fh^soy-(9MG$)1hF4|Qmz7Go-+OV0{)0VGo) z##x0Ul#o?Wc~e)*YdNz<)l_)@HI`U>V){@UXZQpJqutEBp2pBU}5abNaMFN!|~#h~`NHmh54y&OPoJlv*HJypwSm z!;)Q|jF-uqAed67pU)=$_A@Ed0dOM=pZ3CG6~{~F^R(BaccRD(vc)}$TcPW# zwM_WEU087Ax3q9iIOIu$;THtix=&34l~7Ufk^50k>S$d!dCpecrc|JV0k0z5o&Tl= zCt{`pG}AF8Vibx8_59eQn*@Q5qFU!iM*|{o$7-b#Q9-+>ATeN8Tv+AT4Q-qX=<$h# z5+MV-s|qyp>wx%A7YK-?x3hU$dYcHwI@)Y5-g>j(+ay4b3G1O+SN@ttQ6Jkt0-_zt zJ3|a$sl$uVa!Ibqri_#rFzwTz<^`o2p3Ih^!E$CzP`V{3if}zBA-P5Dqbq~}8GzyX zpe~T8^*NJg=XPS+{j(fsDeITk!i26bt}lETl%H0Iy~yBj@Go{*v2UouebJBZ^7HYT*v1K)|6Er5u}IgT##ftUJVe~Db=q7Qkd4#qo_NO2I%kgwj?T=3zg zp6V!8QuJGje=44tk)AY^nARrQFo?yYzu^pb%5*|f1r~GC3IvUS}AbG}~ zXovAYM#$&MXi)nLxVkG@L0BIM&Okq5C>0;_B8j{74~p4@Ps2XfIlyLGo-Rp^mIsUN zWb(SQ_gY%+I$Ar4D6^mlT#G=Bj4)7$?g`tx%hFTLumr1ZdYk=%Eemksv`ml+3lSBQ zomI$U1I{iXXma!X*{!V+m8dGacv0oS$?j7(NuF06@rM!v3xN zb2jRD@sLy^aA)r{=5;ykvB?2X@Py!{D?`M^D*lpmk>J*wvElpP@}P=}?$rWaQvse7 zwS?(n*S~QF_*NA`pIGF~ZRC?6MO9#s(X2t;s&l0_67h@)zY^K$fx)GB#R-a`UwRN` z-;I{HAMkYNbRp(;F#y|SV&oMp0M_j`w1N)qJ5a1WM{PAf#m_JWocF7k*{Lcmt%9zm z8~oxEzP_sK(O)9&RuD0X6+|)8!^M3 zDBAJ>KB-r`GV?m;=p;*ZU2LwPBfyEWWYC`$H<=*bk9YsT{Iqp?mAo^4q(MunSLuW@ zZ2VTvBNlLhaF1QM z1gUc8XYPMarwkc=EMVsoJ@j5S?^PNmQXl{-pO9igNV107G+177m6%@XPC?zw_G#7) zOg_}&reCk>LawB*+{fzh8)wgzz)$rT0fM()!ze!Jd-jmWbMZ0-!W@Eo+20TzC-K}TN=aVI&*4_zqe@AG-MDHwLdHJmL1X*TG5zuuE4 z4e=xhO(&zD|0~P!X{xxGBlSPU$LR!TB!sB?G*FYwHcSzMQ%naWSk>HWebzrtx>tBI znnbCCodaTx@i{DO&P91)=UHbPjc)*4X=K$GfU;dXD38@%C6uU-NoHpG7*>4cbbN&p zte@I4xWOO&(jS8B7e;fC`SlI&f4p!5&np$Le!<`bTyq0RbB9FV&c8SDs8nZ-|d2>$C+ZR%y|p zm0}@6r{jnkZqxO!rHT}i&`^oMk(MDWDtpGG z*Kvp}2lH2-Hl+LAPN?C>Jwl(rV0j|K;0M?BylQPa3NL*X^86t?Ow^x5pJV-IPEm-$cAi8$zS8#3n4SMFP33VcHVDd& zpj&_C%Fppw4OfmVLPY4RB;E3w6E5-Ee047%bXi;yDGPBJZ3kB>?gcb}_vJQ5c_QCh zsz-Jsi>$YbGzCT@Z`K3yGu$BjvBI&;*1Z_6Pm7ZR;q5-EwInuRD#ot5J@yMt-WNrdRtZ=d~&q z1I@!ifS=qy=2HzUBT|FJh72AD$EK!%h8CFzCWuZBVyLSdTP|m&A#gEkJ1ez(zFRYJ zWioKheQGGYEsB1Ga7SSHIQ3_J{|p{H(`q1q9q6V|#HrS_h~JT(Tkt14r{tkf<|ADv z3R4kh!7Cr?SUUppTk?ehaeIe?*fIsw7TUsc?SnH1MyF1l#B>=aW;*XI8jV&M-=bHl zraSOFiCr+O6a=b)zeE#iH0$w_G1T~pH&TB)@hUL1fvA^9T(~W7E*2(VjG3bWw~Om= zkX==uDz}%N>mhud&3_d@*q6E~95FKN2-TwIWsP4jFe(BvxP{g-dTlKxFeuhNTNXop z{3@@uG8C@1t`GU)TBh5`B>&xmZv8i^5?CQc7eAZewTbadTNw<;t4xXNihh_iZ3wBh zDd_dsjE!DZ$2}fniJE?=;#b=NLqVyXrwe%$`!x38rFi6-OXn|($QI!Z|1^Cn)Rtqt zFpfv=g?a}-^NX@5HRimPMmq;70O<*@W?^f(#q$g=yNfBO{aADaZf_qjaSI zI@ebTx!{HWrc)?IF@Qn8#LHgpM>R+YrNg@zy1GIVt|^+tR#t1jiY%s_US);)RP+@G zU7Sf{+O}tJ%8W6;$??0D79RoamOvV|oJ$l6DnJnMe2=-_=Uze?i|O3y6Yykj1_yUK z*|8iQki$P8#KBd#DY&F#KxW+)6~BJWe&#n@xn+8NGFhrXx&UiesGlCgi%pFNS|na} zQ%y}7JlR{Yp-kE*0%GNNTOKfE<>R*+i%YlUu}i~U>-JV2X%o&uv)%Lz^$ zxR40&YM#xL+Z3PDuyv`8s$a+indsN?<$t(rix^yt6D;O0yLV0`0vmL8_airF@tQ9&}p0!;OFO^oBjBa%#x;`lQRKos#Sx3xHqteL2oN&i=rh-z(ZRvlYhXK z1nnygM_F3iyB-MC;c-})o1@N6p1aZh@}{X$%@l5g*s_NFSJ7GM6M_d05eN2~a3SIV)-`@3X2BJdu1{W}#OQ(zea`W#Gj!sNSBK6^AJNxviDeT} zAA*fG;OD-eFFqp6gp1WzSR$vWad*=xjxPFS3RRI*wYOC<`!q5;bEdUjfKAy>52e59 zG|SusNzwqo|EBS(=!vIZ+WQ@n7S`PA`cI` zNq4>p+mWg+WN++>Ho->X&#i*4??eJ9%+%MY9iHsunG}|PC`>&ImsEVflm)HTrTrj& zDyFF^l=oqIEL|2RQ5UaHpD{e+;Lq@w(pVLHc?bhvz{%h;1 zh-{IgSW*I2mJ4Wk9m|bWX3%`sbigNP?4K+&0?J$#0uw2#iQflMVQ}40rI7*F>kYO9 z-+G)Mv6+>DvovLPn4XjUGH)5Bqj^oQop+Z9P6iyQSd|jL&?^pDE}YN@Ws&zDKTtC` zz}1o4=YNzLm!q?d{E`|(clj=IIYItXi!9E0?U{OEeav#Nd^hNAZva1AMN!7{$bE~} z&Gthh^vFDemQre0`gjl@gJ%UO%yqWJ;VA?vVjF!9`GO|y0!DnrtzzJmuNO#$uTd%# zwMzd5ea~vzb^Q>;=?%taFj4wsphwco=69I3f@34D&JY(jbWsO=4$80(sK~^ru$Y~F zc|A+>Z>{|GNUn~Co^T>#S9slvm)$htT^22IDSWW#ad~Y+I0IgbJPQgqIFJoYuE7K^ zS&d4hCWcJQ;QO|ba*xT;Go0&)p2d9>229c|p{8FBdpDlr=52X*>mKfMcR9h>rEzxM z`?{LMp-pz5kd`)aMl7|@uP8LDs`ry2Q$<_Q7i>!AN#zKWGL~7@_`CI6O%t0tH?OD1 zkV-fmGG~{N`ZtR5>nk z`abb>hhmbiFbyBTSI-(}V1D!I#6KazzN+b?i4dv$FXu|yChWT~Yt3_7--TG?hL|>@ zV~Sek$@zg(xzB6Z&HC3uj&S9)rJjuu>e8qL0X+4LD{_KK?CxRG{H3Iz@;GRP{>ga( z##&69mFPKORFrkDxv?rq`=(toC;W6$_B2QgL(;AtY5;bnvDpw$Bwxy(W;Z> z9v4K|H|}HTNdrS+{pp4R?%@5ypVq>lL{kMywZhTfyl-lOhE~Z9!(A(tEAE;8Ag*$ya+ahF7GgHFkz_V3;p#<$g_u~G&8NT`^t1zL(2^}vg?1Jwd!tsc%px(9Q&%g(~W z_*pM}6=wuMi?G_#sqhbf%$hdhQE!$qg&MgdI*BqP6PGA1QL zC8-(SgmM$+F})w1KH=fmJ__zD3T4WY%5a+dq8R~zd}d|Zltdk3g}9x`Nl~TaFY|G1 zG~V5xS@B$sozyYBg@h=E7t8ux(JLA+R`hD9@IA$OGE$B{yCQ5c-f$(d%w>@{Oo@`sm@Ns$B;aXiibqa2aEfdLPB;;V{zKpS60$Ax8&@gU8h}^ppH8={Va{x>{cQTQc9K0-t$; z0k!I^y9uo*%NyeFhK_w1i6o$gT)CUEd=0QJn?K$R;@GAbnuZame>eS5TGg3{R<{aK^R?NV5wsA5R?fqnqUmhLZfa2GHhxE`t68&Fp+eAChwtOsyOKMKPE^$ z9ml*5JkGPxEYpJjS@D=G1 zt;E5YwOk4SToI5ppgC7zOtO^`G;frp(A6{?wDqAbNybZ)!jITPW#4$dCkB*7Z|NXjs`gjNl4zxdsU{hpg!=Uv613#+gpggw zusjrCb+Mo+a@-`=D3NAhk)%M{yT@JF+Odq_y)h8hRN-{utm-%S%lqg4!@-DSyCj43 z1GjJ)R(x|XW826b-vb{&?#a(a9K3y)Z!`;S2bn1;cd`n(F=+W13su&f&1*ppv zKY;P31-F3uDECL#6hw{tPjLAoa-kNKeJ$RtaSyKhTe;Jtc4QN^_G)U57_bX+TkugO z(pLydHPhimnbckb3IrsJMzrMAP)Q&q5}KQC|8w3kWL!{KQ=}8ndE;>ix2cFUfMS$e zPh}EL5~^nhXTzm)EIK3nIpt+htN_K&q)i`0Wa+?UlLCVj>hG8wkj*BTFAiN|fmWv? z*%a z*|(IK*r<(d$6f#+d03Y`r$s@a3aty+Us-9i7**uiN(B7AX~(0}iq)BULdltg%CC3T z>q0 zYtq;d8}KHP03WxO#lmoV@L}Tulu>S!^PJ%Qj zTbh*P064FSp>$o<3hvOY-hC8gE#3lknp>1(6QvV>Pszl=L_uhPlr@i*eC0w3w!>#6 zP%$t^D$vz=|G!`l+vH zHHzbUUPee%r@nRJf45c96JELxdG%{GuXZ}kfM7exN|Yrb5NTpjvlKT;=6xlHK_L=U zJ{=@&hOemBHm$nb+C~<2 zL)uQ@nt{9GA41~>xDm{@kR6Q${1)S?QRm6YQMOK-*SYnrtvuhjz#w=v&7GXckuW-B zQt3r(@NCbdpdAvbJfxWZw}(<&yB~)jUG}iiW2IP}`AjZ@$N_F`p6WK1K~rf~({dz$ zf^B$Y)2=ZY~$qtdfnG1N-f_=IBXpkbl5jEZyr-oI&ls4Ns3if z_dwGZ>Vx69p!vjQUEZ+LMRPnx34)rE_lNF+DTtG}EbjIC;S~3PG!ki9zu=7)jhECP zeyQGFzkNRZ2^{UPq9)EwXo?y{PZ_pfSh)8G7oG-O5Q+<4Yl1Ap3)rfQ3JC-Pa7%S! z#SY6tQrU6o5ef~3ES>AR<)7^Z zXcK1rB{7)V`{1tsX@Cvj>2fFn6mKLdZ>9}=hTt9JKSVYdc4~;~Hf!>t2L^X9+V&+N z|a284mZG@jt(enhNG3;Z&JsHgpNTWq4aGHd{lM2D# zThnpQat|SvoV6lG5$gk&d_`OT<~QuR=xKS*9zS$*pI%7niX@R)Pd!&}kXx zu#P$ovHq66)bajSwVkU0#2QUbq~mVK*?NZy)^9}bU}e85lkpEPPlX&~o{tFMkFX4Z ztL7hUMhWVX^PDb4pGT0#nI-%k9e|4&o%BV*ZYSpUPCUus@Qg_^ETASskyThQCX@Ty z>a*VDSFCL$7YPD36*0HIlaw^eg&jkBM4y7uALj3!_zdAfh?Zan2&x}d%}(5dJUB>YHi2~*KoYoNU4taM#kQ~1m~lW~@WvnqO};<43x2~5aUhBhg+hdhT@{-u z8Jj9LXaGJ%{I5*IOvwseQ^7uR23RPfV4Tv>bSb0t~c7P zcN)$l^(a~f%+9uFkC&H)%Bej5ZrZD>uLq9*>?h5_&VfSTo9+tw{{f*|5f=KqjT8F2;e|5*Z8C@bJo{`VQ9 zUJ6$Kvm)jQRbZj|Z_K7f!Rmj{SZPsU{U2hAw4*Tpzxy2?DM&E<=ejgz3`J%@+PCPt z_%~7dg0AhIT6Xesz9U9-(+B#;$cRvh|9<>F9Dz1smH{Gix5vBK{|0PPot#p#vFO5g z)33w(vAgu_)2N%XptOr8cj{FXwdT!?|4i$1297g=XT0`e46gtv8kltC#37CG zNom0r!6da0h-7sc5RYV_%z_Dw3OcZpShV=2wJ|6(SV}DliWEg5(P*ke_zL@GXzh%V z*!k(8u-X(^Bwp6WB(*4i!O%0ZC1TMnPi*Ju+yoV~6z97?13@DR@*&{yqHp}AxFBR! zyb%jPUSRZ!h>}^_>c9b!o6&_&BFtV0uoc@so#Q2_eskmV9?riG4Mlx@?ZUbbqUlSKJFWgm9#>C-PdG|D&mO!oUK=Owxd?;_Fy_v#cMt z;f%AKUdosypNo-q`2Z=0(O7h2w<+$5%8U2WQI1@pNA^ zqY&LQ3eoK*(J$2(oGL382WkmVIz4#9`%}Y2h#(u1MPA>!ds1LU5+;6uXeh+r+0PO2B*Togk)CJr&NxqpHOr6oC7jTJ?SS~a*Cb1(J+8!r39V>QiG zZJ7Q%?fs}8vD_CZE0vj}r5F@jsr)>@zW%5E5rG=Jd4?&}v31M)sHSJbQ0sSgB6g#H zNk~u~4v<0vuw%Uq$mm}PVa2xNGBLtG6TDH82(+0J0OG>rGuop1?UkAv-$F9%R8OqF zx{H65)p)QUD6WMUn>g;S5G@uq>r>=C2MiO|iZ?(bK~?PK+Fb&bM!3UVW)cZ-#*;83 z64Q$5&=dHKr}DUe=EZIhr{y*HS<8R6%AOq*qAGBr>xwuF`r?CKH>{IizAs~s&moQu zm9eU}0hZ)=kUibNVE)X$kA&7>ZPvSSy|R3wo#22$V0MTh(qUZN57v{*?y_KoD*g=% z^u#e{GvPJNGx|~0D)&@(=hQQ|A#iTQ{#)>&YU{Wfnb=1guF_c~%zybl3-#tcZwZMv z(kE_Cn*_`_aQ(++_;ja*J;(Y&X$Q!)sLptyAYgYP?XDK3BNsc~&B=*3Nq^MQcj$g; z-{y6s5POf1{_=-JA4_<`$au*Z3At+4b(cv|&ad1@Ax( z2obJ@cmGj%9l=aKnPp?rg)TY%O~c&(bAB8PS`qOMJ5^*~vn%fb_y0QE^77ty1F`7= z0^U7-+rtPRwAS*!3)_dojGw;VBU(ouD_5R%x-WEq-i!RTc76C<@P?*>buh87nW{ZO zAoe@)yjpl!IOrhgs^=DJ?u3M=GTMQCnfiU~O_vF|MghDn1#SB7N;}11hUbw?hUBgs zN3r~6m7#DGNS_pObR;H^-1oYW<;-Xc06>p``^$vRkoYEqqmB<53qpYSCBvxu(KW%m ziqZt$=gct{e3ngx(B1fhO1!#JQo1ir0$(L>^UG22xWa_K-)s6Vk@7k<9b1GO+D44D zDjCLUl143+yjEv$@M+EkcO48_%}my;3e*22cK%2vC;Rp$J~sy@L|yqWDl<~R3x0<) zX`E-mS8s-ZQMZBLc=5nt+(uve)yPkV{`1^>Xwap-)5x9|ub;7!R?Q z2U584*%mttgYafTO|S(q>n}8!(*}1q1KQ;`y0U@YfDmhZ413TB|3OrTc$=Fk`fF)z zA7DIR(bcj>Z;G8(^j~d~AL|Zc#6N;A4@V28aRatC!&pQmHwTZOs#!2i}>imClji`@Jg6601XIJwB#(F1Vz|PZ0hr6B;u|%`PE1$$@GksI?38 zS`DL;)bR8hz<%3GMXzMt^RdA(Gb8!XDg>o#O!z#!SW3K$)2huxU7u(-o$Gj1nH($~ z@o<}7GV``U%d9m(_Elnt+Z-NSzl|DG~gdq`bVo*VuN+;=$#Q_w+GI}T2^)2nl4h>RoD^Ax?ukTk%dzU$Y$AcUAJ85I_uRDDc zJTHsX;+#^1Lyk=OC2|DF`b5jDOyw$5jrp$EJ$JSwV+fj$S_23;$MYhg`a8yC`jPia zM98}~*Pkc=&t%(U&AVWaB3pA7n>#6DCxSB$Vbzb*U)(a?Tw2VlSu$@Fl| z^bG!fE;H%E`TdM+w@DIQ+e#fQFXYZ2F5jh(uvg?H*32<`emUSVB;2Xnt&+yNfmGFXmBVSsz(xc zBfg*2g3=f9$5z;@!Ei^e<9RHn)89Q+6ceWKGnIuGH({!qSJ!i@<=)x$9gmT^$jMQ>@a4 z>Sn%gn=gHkac~U+6CpJNfAofg#(YLngupkh5zguQ^a9Kl@k`D_Z!;<|3Z(Nf5VI|^ zUg9ij(Mg_N!T@jb&+z6vi+@U6(zQ%_WHhgPNY$d|boRuT`#?eaGWaB0^bb`_CsGlg zDAm5hYWQ}#HiVGFB$*clX2zZk$HtHy)0I&$0OL>_`SBy%hRICZ@cQ+5gYOE0qDdo! z$7ZI*?EwdL9Rp@@02XK4mJUDv+*}5Jm_R@2#5vw*1Ru(_;BRn}lhCkGo>Xh8yq`jq zV?AI$V{#ohi!bvuEJg?rCk(6cF-Ue&dI#7eLL};pn>nLy4+V*I?B}kEnL9G~5OL`J z0pTwABtH`bX=DD}6bx};V7d;5tdW2e)cM&vkcWv#o4sq2Z+QO-sqci#)<3o$isqMGt^&;)U2o8#Z5U;>yN+Q<$g|-Bb|IzZ+|DMM;LeRJK z#gimR*Wq|REKE<<^69{Iv^_5s(JS&z0ofIs3QaL4rQjFybdZi0Ug~{?QrS@sr%}oh z=;wk>8`cwgz$SIh4L+X^DYQ_h187ib%Nvsp=1%0Y)8~dP4ga`8R%Ldmld|X9g=@$< z-Ca_dEgziq`I&QeHkow3uSn+F~)GuVZ<;2be|xBg@S0 zS11m<{VDkGx((G~Lx?_ffBT;ZJ|!g~W}12zpvU{6B`w$IUVAd&2==L0nIYQ)4dx|J zSiSfxt}S=U+!1^8W~VE#d$Xu%xlK4L0$J>CtsCC z4#J7p)GtI1-5M{$wUr>(WdMaX&?zDz*^%`ZZ5@#cvwLIjn(;t*M+IAii%SY29#nds zwQ`M6R``+lm2@>3eyT=%mZ%s<5zmIe`?|WJhvEKRTaLu{7r;~}o0w-iko@#_rQtlx zL*4s|Z9kjyCkfUL>}9YMs|P=g4y}r91xZi~M3x?jBs0-V-@+aEOF2 zS}iLEDMM*r;x8!Y4TpIvKQzqDh%cL25Cu<}g@cUny{;m=!c(r{{9GIuX*vH*`n`Vs zWAqHvar7e*aluW`}z49s_j4Rt2$sROh`-^TQn#nDQ4HVo`T~iaFz$=Fg452PvKR7*8vkFI`!lOWT zM>x4qDh~^ppaO^@T;iwo+9b78vUsIP^jEcdwRt9h!<~0`JZ65U`ULe~$?xTA|IsrU z2DKVJu%U%iu$%n@uhRU`;8N>a|3R3tnMFmaX9b5^iFD$s-_@0sbRrUW+gZ91Vk?3B z-l)U?iW}UAp9ib=pOQ$V`9UVO>L>Ef6NkzP13HQNF^KVMsP3Mr`Aa5E4& zl9M0K>kaOo@dAcv6kBiLONUf5+7af6FB=*F_pgl2sM)M*%TkNr5Ak4bLCjx}XsKJ- z;Yu%#cKw;wcqhF^GbZH?xThY?;W5AYFg`u#czzI^!WbhHS%V6yv&_40Qg35}a*oA3 zoasNdM7sH5Ba5KPsd-ZZ0du+t9^^Cs^9Fp+l=#0W`A9_C?1F04f4 zZpsQ#c)yL9QgSSn%q-h*cxO30vzvtn9Jb;_BCWrinq*9KQy045!d>&ZrFZ}0N7pn8 zUT6j4Dn_q{7X zr_-K*W^ueT$KecR@R4Y6bxD#Av4GSBW+jz}F7g`hCn)c#4!c8A3rDj8FV5F83FKfJ>3Y6F5<#=SD@ zxYUoTdJ*!@f_h>x=-Xw5B5Rg4wti{p#<6MKO1`E0KfUX%rAME5@GP0g!_fJA*44ni_ohWS{hNn|JU<-%TbEUE}t;7103_j(Ye|73T^~JED)8bpYAKX=tqu7iehs%oL1l?Lm zOvfZ)t=tCzHpwq17ToXNuU_d)UdCTv$)vsS=2JxV(#}n97t?k0}+?vR2{@<0PI0J zid<|wk?F|Y&q)n2K?UEWzXOm?w%-$GPAebzkJ`u5s8Jwc<{>w^XvIsYk@hrYeW=h6 z9#~~0i^pD5{iLiXzz3{prYJnGMKv-8gojBN9V!DCn1fXzK2Bi~K)`CE)LbspK2)m#P7OwX>5NYm$#fh59dsXqYoDT zKp@bnI=^OIxY>^rUcfVBKMYDCr!U7(z~hkj!0Tw8=0~qfk26;$Xr5yS6|`FSKjX3T z)?D%9NVh)@nFzC?c~r5=;)&dn8CObZTO7h(6o(Z>Sokh40sd28Vjth%qwkPDs3Nin zX_;->8}1rW8UMz;>SCcbx=*Pvf>Qt^MO8%Si!=)dng(t^*OZ(Ib{C*BWq!-t6FN`` zV4Z0~ClUU*l+nQZP7GPKUd<)Lb&c`h;ha^@)W-NNnz*e+&P{$p32bW8T2g2-T=aPu>@ASdPgu%TDydGdIG#0P_EsnIpiHRec(cOK_W6PRJKUrkY zDkj2g+2pR&3dKhh?z8>WPnhQx)kqS=IdZR3K9K);RM>B$kNZF>+jk)MOfqUX&3m|nspLG=ZMZa~ZAAqF_nJ;uLP>zk&ra?RCAxBJiG1$uJ6 zg{6*%H}TaUAqjqz+16Hgr@MElMDKi#Z(;IcK>IPJtYX9!9(!jXRp~O~la!Q7quaP| z759{ASKtl&ua8>O5Oa|JQXvyq#v4OXDXSux5y?a z$@U66T&vrti&St-sY-=bWTR^N4<2_|FtA7t(^%^jF(||a8_IVNV>j2tL zKPue^xvONaVrV3aFsOYzFdKSI0hrz&C%32Bx}Ctz*ZXhKE0945U1Ju7R|8;|z3`k920M%H>A|2=Yfw$+gn04hrzzBKh;k zc3$TBcusi7rW&?>JKOu_E5^qSIEmz5K* z;l>-+NXYmr8D9{ipqd|hiLVk+hbD*)>DpZMvNvx6!cI6RS_USMY47Aa?3K6mw7Gsi zS?OvbT5BiYQtnRC{W%2y{ZF~y!OzMz4-*7L;OhUB`&%dI6bYdJ+u^%pRrLCA53kkQ zND&eIzcC+E#aG1t9(lSb^87E>>aJ*q{NET=xZ>si1fH>D6?d`!6HEL2qsRzo)>yGy z6GQX8Qb+bl4P3$OX_r&Vx4zMJ-twkqgh3a_RqB~05zpp2 z%5^@By_D8?Xe{+bSa`oIEPrc(t?afsy~L**YkXsA9oW+Kd|dL)$REC~LX-JN?W{~Z zCW)OjSa>R6*qZsYVKxsB#Et>52pKVD;KosfEHYT92F{4x5OG%ILvmPvbrqd%8hXcI zW~rx`V;|znjY7KN>+G2>OoeF*7$U&YF_`^_i^fpSvs+HiQE1R(8j7!-7xGB(#@r2rbeB-xhc}DT}m=nhzGD?#NMr{9N|>%7m6K+42X;(iXKz4 zmJN#Sb6Y7c%|f%ctH103J5}ivlenwk7il})PdhDF#04y`4;SIBw8(0Y!w?E}Y{toa zVM#l2i47%S2d%>lf9oPZ827Q(poCb>gDH;vn^W9f9}f+ap34p&$2XJf8Ot7lZfa8g zTlLFaDV$DMOskP6_qc-|^Lu#SSTh_pxBwi8a$=^?=>-0QB&jVo#$k$VAPuZ1InLr}jxo)&gN7}n#qg#lr3 z0~z+L1#OItqFlgA6O}a)UhuI8p{e zr6s!b&$f#O%B@%0a~-cOw4&LF{Rh06j0E(kM+aglW$Lxg-|aMM)2GR<39Jij!WF57 z8A{E2uv!g;us3Z)893)-@Rp8)HBkAAc-8?J>(8RXOh2)b{JfW+BVBe=yjacHW>>+b zhqMZqsD9?Kxrp8WB(dETf22klW9+ZU{Ik*jb^v?ZwAPo zM9=I%KHfeKMjquJEeX$%OB`7%0()Mn1fE9aO1&(1@tQfRV)D6g$k(h-OdOJbRgw-a z@^eg!L-2pr+&((4VwU=RnjVyw+$XXRh!ze7q`sLlZ@sflOQ(T+9KNauYpt7&L{{e= zy?Vt8gl^Z6#!@td0*}>IijQhLYkmU{@Gdu%f%df(ozJ=oYrb5*(m6ny&DB|4FcE233k|fDLEd;RHZWkI^6{RiI$tJmsB3g6yiA zQ3OpAHznn%VT5j?HE2iMMhI25w5l63V&!ldNlcVl|Nk?{L#qFQ# z&xEY04-lwcw<&m-!Kgrb*kCs=FE1cqV{XIwYM`V$i-4h;@d6>RW{EpoxAu(jSK4C` zpr(iQ{B56O#e9S4KB?rvo3J6z4#~^gud`{>j-fs1o{2=jugwLyn1k=uo`HeSj={B% z>0u!Gy?F~C55jQQMR;-vZ?+#~qbnu9WT|LN%I=wQkiraEI1K+W&fD&!B(KDx)` zrGcsG!zuLT@3b!n0&4{B)U_-3px7)ZfMPh_EsD!Oxq0h^D}2O9Ekcnn!}Bm`zt*GB z>iy}5Lefw2qXI(8V5%GYnwHh-1#E~KU7dC@3p~a? zL@~R)!xDSVkz)(ags(eU`&adAw%O1~&Kt0EYqacbn>7tzd_7lTxrA;GHumZZ0I>4B zVh-<*nk~}2dfyYgzccwg3~s_`giZWd!9r4>TS!U*hlCtC(-$wd(&uoPgP07!4?#c4 zbDEc~vFb-DYsmK6Rn-)PoLTQ6CIqifwPk#(sW2*d;m{OnRYfzH`s%{KZTato>WX<+ zOB8jc8K3Mk?kaJxea?06gX;4Cadl3?nE+e3jWw}t+qP|EV%yFi+sVYXZQHhObK>OA zIp@CITh+B6y85NxcGq6LJ^+!bSZAbkpg?mZMB>7mor|F81(5Mpr3I-(mrsH6;?O#o zKbe$|y?eQopFBR;SI_5UkBs22H!OJxG&~4^m0Go!{WDnonvUq*R&s;=+_h1f2HN15WzRWs`>1?}>Trx; z`$VKf^@Gxw?c$hzP=LE-0|WIOK8{`d!5?>h3$N+Ez61(GmiIlnsCVHSs(xT|9-*qV0V_v8u7z@UdjIZTxlZHGQMe9TT@$wI8Ni+)*#HECAPNlbe(m5SUK#Q zHI!`%Bavcx<(v+Zfc{n9l{-w)fx~_FT*&FltyC+KYBQ1pI67u%98Uhlm(7*^S%5jA+-HXh^-h;R#x)9}?tAMM2Hlc?wc?MKcZ z;#wq6;2Nza=%XkI7TAl>?QH7^{k8uW(t8Nbi5oSaTNOvPe?N({B=$nyCG_3#E}nN0 z$w)39S-ERDVJH1i`pr$bDX$W=fkmPRhZ8iouF|+TN#amO8l$mZE?U@QPjT5V?Cj@} zMMHxL;N?n3OoD@I-vl9aa)o&5&S8-yG1b)}P8CBZS|RBl-y%K&1ID)8EFXbQWiIAa zgvbt7UTt^e74wK$Q9)C6UY{GW*=gmY0rguLL4|u}kn&D*PXub84`lEl$fN~|nz36s zNzRn_m}wKZQ>OYDX*Z;;m+s)x5KI~GQ;bCiz~qlrB?3E897(jR%y;I5xrJ*Rv zJJ^5f4=2^D#e~n{!t`}KyLx&f0FN01%u`xUm9UawQkB71i(4kEJI`Ii&Ba?6EbXt?VV= zQCbK8UOb9vA_XzvK(->&j7Fz zcGycKv~q|B@a`!g3M)rvQ(5QETS&r4mnRqQwh0R81`PRehl`|Ge0dQ7hEzQ~$V^&0 zxN#Pj{c9jxQh>8NQ;UYs6u=uQ4YQ~)&2j!jJU0d+?AJ@1UId9x!13~PC58q{cLxaZ zf?Ws-b=pL!4|$v$;^L9Xqoay34itof2zM&sM;BmJM)0A5DEzVU^_EtyX?n)#xm04d z&eY%ZnT%-jgs*(hS}_X+)MNxdAa%&WGO~Xc1+itW86YE(gbhG#tK*5RiGmyXsTww0 zcn7X@Dve$*5LF2SKi9daRT~A=8@{YFw-ia%>r!NkRo7J7XnQfq!Ek6VXllh=tupSArS~d)*)sBAW1=k)Z5PT3aqLfQUv!k4y&u%DckvFs2y#C1?Z2 zJL=Y2p1enZ#hmfAx}S<$4&@|b8Z%~ws&d+kz@nyB^E8`yp)8mYj0vc5aB`@Tu6W?Y zg=x;+K{put^SM6s1b8J8xU}%h(VF!g&yi(gHB%adlPwau6`6u3+D*U&+&=9NSopIK zqYHM4;7x?XwRUg-$lQ!uLgc`wTS~vYBZQjZfJ+_dp$EX_9mO4qtgMw2rKsTI?sgw)XU?}U)R#+)P z`m;U+nMPz%uwTb;(%7xzq)cHFGltYok9FAygMWz3CHvAxO2C+)?Dx-wD-g`+Iti0} z6iSkO2?`nGh>^(CEv7yZ;nr$4kP6tw%dMm0+C^#^oDEXo$sBDu@x=}7LzF;3rORg> z>sA)xs3F$@VoK2B`jHMpQ8OK237~3{kb?SLXnlYLFBm`98MnhZcoyV$xO)zD! z5YySl9+oE=*@EN4F1$umt)`DB)nYe0{Im&Lmcwix$J6K|bh25$I?OhcQ|_yr?WT@Q z25Iq#Pm5_k4Urb+QQove^!ENx@sBy#jZK=t3W$0P9{N z=;mFy(j#wASv1C%D8w+VEp}x6yg{xQl)^^ggFX=sUs8D9V3D!G&xBViaMB(r9n%%T zE{Fry6`ky7b@T3JE&E@Y&m*+U`Vtd5^Jgn>cC{o$=#yHyW8CZ0j596SyCwVR`4tv3 z#0l^KcQ3b;2$#D&{}@qj5BlJ4QEn5QNv#N%t3)teClp?7Zoa74-%I|}g@a@ws$+#H zpN3K{fqm^wZCNuFtOLw2srNu8s3ZveaX%;(c?|LSSAbRvLs+vchcB#A6y${EFltQ@BljnaCT!6!r9 z!^#oMK2TfW)|>BNJ}OLei)3}2%*D{l*i<6-dIK6W_xi4D68Al{ou@JdiHY{_(jwgS zr3jG=tQgwNqy$E~T9!hj)TQ$IJIxvfq^E(4#NP87x}ImBo|fQfOPWc`k!qTP)KkD~ z2Qo-WbwwURb4g!O&p{NpK-R)E!xc$RLFRR;8GVY}_<2bda;TBd`=jOsy_L_j+c>$3 zd%#-|*>6>;?cqae!2`nxnY)0!2|Ok!SsoIIvKsCE+0b%HAI&Qm>dHyMmOivLl|x18(dk`F2iFJlWK8Dv73FGAzik66MZa zNUAn882cjl)6uU~9s^<-^cpwTMiUH5zCO(qn~+Psv)Ec8dpNICk3s$R%Tq?2j@@V8h#Ol==C2kS zD4m#V8>3E;LTeihmhj($+Fu)eQqwzH$n!o_~?z0{qjd*Y#_Br zuUpD6(MvxJqTE9Df*E#&tIdE(jd3aJGfMZWU>1$QL-603Aw73f zsw{rUuudeOMZ;$ldFK?scpf6)Q!Am14;GS z@d#%kK!Cqp$PWS8pi}KL;qbs-H7s>-K)U!qA)h6>r_C_XZ|;M?eSOq;W*@nGs3UZI z{Y@W%Du*uKp(^RC;sNPR?)G-KeWU(baVo3MEe_-qIa(i%C_dQo5Dn z>-nHamX=?AW@!TjX0#!2uMNi7-g#S3q^>GnP2~jSeZv$(uVVmUB9)jL;Wc-}b*NeL{F(=fz8dC&C8ZZP| zm$5BO8~t2~3PC{sb}>c%Z~^eP_`3tzXvs`B^y^WA6mZCRD(FndVi*NT-MI<}B$MZs z62S0bSlM8^d~o)AeW~0!IF0+}sh9ED2qNufX}=>*PS49G{QPjE1igfTA%$ZYq-esp zht%kMgS*xxB;w=mZj-y*<*_n~=OyY*!kN9YJSyoP5^ z?=5@>mC?=yjC~P8+RfH!!VTEfT^wd!#|CrCj+3o;odr*f(Mw-#p%~iZPcd1hh*8u` zh)vt(uEi_xe5q?}2x^on!oUqUY{80-$?V#ch7znhkMwRNgmw(~KlM5|@a?G3#i+W7 zFiGLg)&d~C>P9cg1*&qHSiH6ktP-1@mWgnCC5F>2Y|Mc`^ZaPg&V7qf6ne=>H8Pp_ zexPI{=6Ef3YmBoKmLyRQ5S9mZDTLiG)jv2gcIQleY+z`?Wrp5A)Y#`HiH(?9k7q@7 zGJ&T=)9-B_lWmiyjyyl|%XJ){ctlvg-PGl8TqNKR`x^sxIw{Ez6h_#3oKe{Qu2l9j zFV%IQ!f^qsV(K`zT`R3a);4rJ$e+xLPsFZA+XGDht6KDDhI7MLw1m@M&S#rn?l$_KojBCVI z(xLKi;E}3;2;$ka*W;}PMZHNAbNN;Z`I3l9r+(OIpFaRNGJOZzur6D8&rIU5NBIRR zd3~P=S;7-^W?jOJ%QW!?OT3P8+aD#sJH03Q%mERDj0vvN(IraaKr}v>fCEfy4|kZ| z)KJpM`-IlVlLp6vIF1P7cR>{|v^NRNGO8Z(YKhlD>QmfurNA+OFnqaN!qF|^#rHEN z@pTf_QtESTA_cQ$@JBF0;QL+ly+PT(#!;`}2tAbxRpjo4cmm_rUL3lw3@8Q=g>e4M zF$DXYT!dZ63dwR_pkhz|PZ!LcYerm;n zf)COkRtUta$`U!hc3W$^}W_0C6!($#E`P9~xh8rup3vRHs@%08FnU<~1vj4^Y=;;)1b3@|;f7D|0{;fW@-6Bm+I%~|AQ zYuWI$mVrR=t@jHol9YtgS25NpeyeEeAG4nPjP@yZvX4xs*fgp$EgC)_AGz6+xzyT_ zxZ3k{1Wx{*lF~0{pJ=U1Yp)AmPc2{c$)aT<(Kmc)9KAtnXBPm*jCDqa=SBKce&(I? z`P$1$cISQ&BR9&{6eEGw?c)6BXs4y zK#5NhGcV(VnWEY@l{hxhE6hf!+Yc<1l6Vx8NR1+bQyh`^8on601jm`0u>3%PG%oLu z&UB5&i#tVi#z!bnsI5`67f)31HVVVfmPUp8H%J;JUJB5EjfQ)bB;?HPSBdgrlDGMd zR0u%@?9rO>N|_ZHTp#QN%EZqMig_8`gaqftZ2G&2*7Kr37eRGbKZ{=M3dkS`Z^lIB ze9YD$Zg0v=bxPu|2nAFSt3#*IfK%f6fQ1QBE0X)uTxtUA5qp7m96Yx@$@{}xDn740 z3HOb`5I&$}mytwu)nFt8x}|oO5;2vH*fpeWnfM~)jKZP;8`bkoNSy*=m0#NztkgT8 zP|wUVinaCI8gdX@EM1sJ_&f6ST@IKB{anywE5I@bv+g?B^)(s1o{4NwKXb=F$PzdT$9t zm})?NDMtt4;vOQ~rPr}=_=an-TQ{D|r}KCPF zrc}uN;rZ+6osm~swkdY;l?t5ok-iO=S9SnIa?U0_DTAG{CxB&F?FdlDtj*a$9boZW zQ5rH=2CK~pryCFHl)~2WIT4l{Pe96I@`FgBe$b96M)>X*FK#;MyXT5`lsbQFA<2ac zR~Y>~?bcwtbqd(eSyYZddysfH+fCjk1GvOh|Hb>18=1Q!f>%{{Lk*RfsvC>eX(51x zj?qljxEF)(iS3HI;6TUrh*;RD(%_iW6v8G;eElVa_}1lbxwzqr)|HCEAC3a4fMHn< zgX5;P(yD=2M*B<_lzN_h3kCd&6k0NUxy#|1aAegejChdBh{@CoS$-NSwz*7&Y{&gP zTu*BA&26w`qi|G6jE!sy&S|cT!lW9;DYth1JUn7Kp1(pXIu4@irA}7gH!1)pf&%$r%r+^8!EH#4Bnr0jgFCgl@UJJ1% zHeSB$C@zTFf5mA<+OEaG6R-D~k8|;TOTK&sb_tl@re1x$ojYHfH*hd(2Vd>cldxfG zD?t5XF7kg;c3va+X8*(14YtdY_2IKdNRDsOBh(y{CE z`8Y?ZZvwL~OXiOYBwm11QWR)nr~6Nykza2b)a1FxxktM`#4dDy5(K2mi3pg1J-^cp za6e;?p?dNsOkxp#39o)0GF$WGt5J@M=6`0Y=H`w~C)%d(F6cSSaz29_uWWG^IPcY* zK(Umqf9gB@B5oIKAAFe{jX&r6Gg4;b$myJ0X^WUbqRx1U!hQ`%ee!+CR>jQ)YG-`- zetJ5h8G$c%3E6o&d3vjjb{fJrJFZB$h=q>kOdk$W0(y|eE@3z#f447jAIbUA4I@cm zq)DgSCKSk>Xs9)J2sVmmkWOQRY`db{$}LsKs^5~abiEigOYaCyMb|0JF` zzQk=;*zjdY%jO5{`@A*yyZod&n%MMa;hNWhPa*}S{W+u`_|+i2s0NV=-;tOLLts9^ zao*HxLhC{GJl2}XkWTZI0OS!O7kL~`ZdTlLC1WYXuVfI0@~2Y#cFk$n!~R|D%_sAIUiFIpRqrVyp|5`;TC=|tfVm@=v zgRZGr+c%j?>uy<#juew2ml1j+%;OV~`m7kNU znbA}y!k^aw+C)(aPA6sYN>$(3GY#^iH$N=sOBNJ5mfJS`OHQ zWh50&vSg+AWff?CedrLu5ZVv3zvNwbqs0noCvV%BSlqZwAsP}PhcfU9OSdRuP|H*_ zg}aiwr{k=nsn{p8Bm8fFAOvLd)q1)|$1-?h7VPl=<_GS}2xCUH1abUnN&(XbY$2*b zTYGuH>~9B|V%r{I(r>tQv6vziTl~@}j?BMOAF~+-KtFwTIlJF$ip=BmW2|;`!DV9O z0rWXOQ&jy!U!2F2m8&kTktBV8n-B|BzVW91oTk6OI(ue1$bT)K@gqZgkena* z7WE_H%&SeL%C`JOaaHP%yMA{CvvVN=?!&eKLB$t)0C|P)F`(04W%=wo=*RHU+u{+! z2IqmFTJ2GZLGlK}mrP7&M(Q~z(B z!Fjcq%r!y^&-Tg0btucsVNW|GcQd5dgqL8-=W!Y`l{(yd96h?bz(5W5$|U<=RSC)f zXWmeYq0G7yefc2$k&ul)I@3SVDjEI`t|&^ zu4)JHJCKkddPf3!yqI-;{pyVd)n56Bl|u_kRZrC2p!3v7lA9*p+2%#}v@(EoH|-E-V;q zXhWbLe`6Y(UClqXxQrSKa&qyN17pWpvkN(i1?;M3f%dHu4eAi-nf>2OVGwGIPByL8 zmUyjirNZ)BmzUr1OK+ED0aK`eb=)=8Z=2c?r3-iE-ANy=9*zCz->j2)X3mAYavu;u zJ({kmm`dCe7W_C@wuP3eHk(LrK_M5924e>KnOwM1G9wtr4$vb}7*Ny5lT_iF} zS(-fP+7{TwGx+n#suwzoc+7g4EJQ1Yof&#^E&UH%&p^x18B97pfc6GDv*wCsq7}v= zQ}`A2wNNzr$2RuY1+dyj+TDiOFyZlW!lh%X{*u$wiF#45}wK}St zzS9ld)e{e;>HD&0N*2$WQCSGjKia@+^45r25ywVcHcmSYbFbxec2d?dyRH9;-#?d zw8XOwQ$9t0X0uHPcaDBPo3aF>ljkx<98_fC(jW)TB=h>J1hX&R^8|szK4;gcq0M3B z?b#_xB2CkKc%gi{ zv!^I-YY6F(CF=LwM}RL@FF`pPU*Rj4Y@1g?zUc;pG>5UFiF^ERk|$otqs1}`8ul*fGgaa$|XfxolKyMnVZ{v52fNsOTYbe0)pw(4w!^auFunI3?5Z7(UVrCF;<)}V`XXc& z$A1OAZJWktN3g9WPflL)dQz7 z{Z>&c%4q!7u*y1BBjtBo#)=yU%@Y5PhAg1hKvVndjHPV^Hgo^mz){ty3N5+wv=&|d z2e{f&eS%4HRJ34DOYJ|dL{-Fe%~pX^`Rtr1aO-CY6)L@UO^YqhG-Q|MU(GaA$@wdD zc-D38cjBAoeyPfH;~p@Zs!*LrMpaV_{BICXDWc6v(fMq*GpfS*F4Z#k$z?k%XusGKb?jh2ctH%I4dVRpyYNg>h==p9OPm zNT>#xm4c<1j0xr!G^p6)z`_AQ`xt0CM{k=LR7#?J+o%>JZZ@(I`nBX|Pz%}5fI6Gi zGL>7${sNtN_Fsj?a^#DT@oyj-r@p_FMu1YDWJUEwgxiK3s>Om6h9U*GkP8;9clsoT zoZEm3SDv(HBnP!Jr`5ry1Hb~gOK`C@NLx{Z{{m*MIX6KeWa_Q|AVvkuhFVH=%|dY| zuwSzbH2=O~v6FwsdO0j>{T=WA?TB4%zEHd`ol)(j3TsevQQttrReX`qo`^cKnq#7d z0d@Xl(UL-GfY_!A>Mdw$d@H83>MlYd$zI@K_Vx4HW>$m9vM=%gUL;crG=TXP3Z^Gsp)6|G{F(~9MEuX7bQ8T8i zKDJoJs|;3r19muE3?lYeTU5}yW1C#|=$om|{IKmzCU}7m2 z8PHe_?M>8{&iA?R&8ro#lweI^3pvmcMuqtmW;&BDK|jY~M!$8&GN`HsMacoQwT9U+ z3Nb^)A#~$x_&F>Ku^zT(h#ZPtOIhe%z_MWEnWp-^n@Hf+$P91N^^Tb z4zA<@M{W-|+dApyx(sxEb0Cysp7$3m8 zmLqyEbQvUsiD(A*E+j2Fa}7y1!S~t~jg@vUp~1oU3R?rXSE}4Z_kmb_Ei?0BIxeit zgk#G8HzFuNT~>A?k@`%#StvSgAmI2h+;c;Djjq(eF{K0jvy$G9cUUM4hlB^g4>bW* zKZd$&!-F;*?`6}5H8CN=`xXR+9`db}^WNKebi6xhFmVBy&3)qB)XC%9Ph;(y6Z&Sx>b@8`iCDL4}wN_uRy={Tq zzO=ier@;xoIrz0@BG4A|B&|D1j7iW{O>2LDxo)}{Yb})Qc)70xf}O4I?Gl20UA$H) z21%8K8gcFCmq#cC*Dd|MesaPTtw%kj;_1qC%q9n5*U#L%#$l9U5O1WnafCY)_A;8T zSoRAigq!xI_HKV-0&9<;cSHd3Q-oxQ?eooVF!ycEmPIN&gV2ID2sHxA|MZqp(4X6j zBN%co?DncG;^v+h+aMyRQ|9Ur8NIK}{Ppd#jE`i*CM%g-;Ac{fE|eY9PdE*pW!Z+D z@fR{+yWpmGy67!s?71pM%?w6mE!9#~4jXNS_Zf|eoY&OLh2U#xgP+-1yh0o~yn|)j zn#v98v!PG>SK42wRc-$!aTR}e*D9Gc%DtGbGKem=Jw4Jso|L{I(PBpHK$fF29Q|~> z7l`hi_}B>M-8-1fM0`D4?n=xcle!jhjO7i0c(J4borKkEqBmcuJOS7Ym;qJ%2)^x=x>fi#*S6-L} z5egGfGI{T1Eob_D6R?`;3FZdvD7(Y&W^~o_=aZ}=;`62SmsPh6tV*}Uc`@;`H zz~j$8?&&tvT6_yrUJ7;<@*O0L-0!%8> zF)EmNLb-o*fclcg6a~X2--|?TFzrdDDv)w=;K36)4XIv+mfjon$^PlPAnWe}H53L|N5r1`JIZdLT8IRIgbpmlf^g@a#vtC-2{Mfby)|D*f1e ze!LcacmZLl(-t0cH&ZP4RHkQ*gdaf*EZ%|1k_dSwoeY*~F-^p^&9Y%B_5xG-`E zaWIZlw95{-5fmDKnvKCc@cfPfcQ=M7Xr&bk7n+%!XA&p?+a0^V0s7c^vh5KI0T;x5 z!*YO(Ql?C4g!=aP_HTxL0QRq42-+6Bl0$>ZVbjh1(YV}`0zBDK^|)>gO*;}5Rx4!R zv7jUv@?D4rPNK$Z`0GDMB}e*EDZfZvd2-$G{_(MMr7e|r!%4iLp}05@g%U~jmO|dA z)u(+Sdt1j}lUGes%5f8pStfP4efop%CJ4SzgY9Odqk{o>tN0_7fQ0;E3zB8o4BoNf ze@{)U?n!}oXT|GpqmjqzlZ|0CqR5&wTep2kv{{hw5qv*F7R0DjPmJqGl7OA)RK+t6==De_Fp)GO@Rv8U=TwQH;}He5z-8?~=-B;k zXM=v&U+Gs*f#*IXjO6)&uL+vbia(uA?0W5_6WH2V?}!xd63BG8|2RofLVdKk+`G=b z090x$-jgY`!h7-P^s^F>{|kX_CvN}Dv~|HC1jx8g-Z?;N8-C=K3PR|cyBU;|9_EW-HZaI# zZ^QQ1a|$DMYAP)9eRzL0>!a{Y9?E=ga_`gw8B*PxE@ZOTCp+gH+idvL^ZFg~&Mv`P zCLuvWHo_Vwe*GwfIEtgay}RA$k^?XCsLpW_-z~+BIi1NXyJ!H>BGX6Qfjm!S4yX|= z9Vf&bX9udz2aPM%EAJ58bOF=0!m&y97lxx><3p^qF)FhyWe?RdaqO?lnp6l>`gmiM zJ2+b91aS-H1M!*HmlrG_e{w>FTN7-GN8`c&NQy@H21_I@U5GPOoTTj~Qus0md5kGFUv7 zN!@>dfe|aKVUATZ7~?A{dJd$u{;Xi*MZ8g{ZxBuPZf}%9p<4X+dR{Ha;gA+D8Bt zRXw1FE8&3zkt>Ep>}k7c4~P?q5UF^Rs)8p5hL=3N4L}I-V>YNCkM+NXx*FPNLlqA@ z^G^h$Sk#T}qa0Js%`l`l~x*(e$DGJruqQdk7-hj+`L|4tGR-?iAn1}Qxd zrQ<+cb$dkaQuVgAg)^)~nu=|Q0ez#*#tEm)DhK|$rxe-&nC1R)xm9um3f4h2-|vOL z#Jm@D6vV6wFANp^v5XE2z$|^iQzS%0lnFT6a#;%R0`xxq9xLuy0_;xO8x3vwKmiqj z=g_zOewe2;)Uae$PlQS+KH2@T>=a3b_Lr-ay~WFsJIT>=0&>)dJK=LHn4V=)0i~YB z3|9mK(Fu89Rn(jhA~d6*MODczvPqEzj6g(MbolY8e1_Ly&FRAncHIAJu&Fa>KUdH( zn=8OPr}jTHTg^1%1@J{ssPu)sKmpw-IgCp{K8=9`jpv3QR1Ii*a&Ma;Z+JuQRr?I} z7Zdm#Ss7@NN~nLf4+e6gQtX-ZHC8N4M!?TuE~}YSE8R2-aDJw`D)#E&lGKhMe;9r0F3jCT`(G&Z2Cmkl~Dnu z46{Hn(|h@H9b)J_fj?l@`BcUYocl4aSN%$9!JFFrvpL*|wQIuCD^Ad+AsKIaTi>c1&c>rqT_^*by z!pH)thkyoSV`4#`O8}Gf&AbmG3F`SDMS%KENEn3!bWvuz@S(6QM3>W3ac~6BO@?-NYBtqs|4Ij?c7|}a18<=tPSCODz@EkG0 z27Dm_pW8=_txYHJor{=|J72X>T^|6hz3mr}F0Y=gJky`efSoUUB(IlD|D9D4bPAq} zvI+xt?Ad@-$ekO2UYGB?>)qe;?1O6+$S$}yHAcK+s2P6OA*~2k68zeiGH6}vDE;?% zg!9p=(i#JwVeMjnP!coyM)MWo2$HcBn*0?&i;3kflJ;>UFu(My;|P6Fo!;QFDbiw) zb3d`!e#f5#`IHBN5~T?i^r6HgR=lXyfCVoHuK2xa;y{v)35joURE1R(%j)Wvj@Yw~ z@i;^4h54jCqpjzTSb8lKY04$~O(@@iB9W3|q_pPeK-Mc@hiN0*C{yfcW+qfmWO5^b zFLB-GrB~lJ_)bn2|1$L{f@Xbp4J73XgehX^Mjn{W`0rKFB`?-C?`^ZsRt%lc6GB-X zrr#5pgl=WL^ExTWFaAPzyO&--`cY#zC5!aGjvtcbVi}_2hWa-c6u zlpHrY1cZmY%^&2^eQNRuYMbf0OJDE_X5A{)I8`SB46P~Y+gpkfZ>GFKq0bDH6hS)d zQIm0uE=BL#wG{1QtCP-SIbbJ-Sqj$XN`%@2TBK7F=j?hT)x$RJIwvm-CpEbM{k@YB zuw*mg5itjs2B;ynZi$UHX|fVTou~rgYD+?)zU#LKTs%D77rj27ZYySC1qvJiE(zlR zdY*ZdpO+VWUayXO%=Ustd^fy~#WIO@RP)@oWpdEemm4MT058`W?)&E}a49Oc2Fx;! zi9)9d>xEOKSwhYNqwd#6Dw5rx^gk>a9FDKx$i8b@H5A)9GpeDn3l?R>~TU8<10|~ zxo(tFX&X-Z34Z_Ka4}Dm0hM0B-A0j^1JODX4lDUAd+1^@S}5YTMim>Ne>X!YLN}_5 z4NkDJrfQ^_pAsukoKE^*tn35Ha0RmkoEZkM&fhnd&acCM+xL+z&*(XOZ+Z+C4(f+X zlf-g^9Puhun-ZrjwJBkhIwwy#8d(qYOa1YX8*wa5!OM2t%PM|&BHGl-tmc)8NHabg zPMTM;OIG+b>;##t=HzRDD2lu?zkJQ4o|4NR&{DCP@YWoExbAWnTc?%s^BF61Ej~MR zE;*)?wX-48#Wv^~9%UIxz0_5G7eYlrA^4n>u-R{LXsQ2 z7=&~IOGnimYS~h5rVxvT-%+dfGw>h!WI6tbC|g|*=bZh z+{qWWObF)qK`5^ROa`ctTS9pe3Y5kr!&BbQ{gWVxZ~=z*j>&>13V)45jZiZCcg*`_ z9zqhr)JN!2pBp?L92KaH6UOIBwne$IK7gnD1LX8M zpf15JLI6;i`YWd(&xzAsj*aTnrR&?TDSeury$ z63{VrDP%Vn0ylqN=Pc(r6=wM$g%9eP5xF=RU+NPU6SQ8;i8H~v3r-~rD_sUSHSZ{b z2RwzTd299uL?sPmbx>40|4B&a_oRn~R@7Gv1?#4T7zm*p@4oSa1Dw}hXYHJk%*q;} zSV~Ri5#UT@2#;$byEanIUU+cO8U?obN>E>B#u?g!11%(Z zPs<%zroYLfqYSdp2&(#VULe-$$T39`QvW12pJSRAP? z`TvAu$au~FD4*#L%d(;5H{J2;;Sy5?T%*|K1jw?J<5Aq8r)I{|v&2^wG!hW9|Up`FA zLO25MqQxbE@C0&b>+86W%0$PRo!gF*j-vvL7p#1b2Igyr>atwPngg&sFX2wiBK&xM z{#M7z#-L64T#&K++Bw3RnA|X48*01~KmXmu&&Tb@lBxi&3z--V6!ny9jFCR!bji)0 zL}vpDWC;yQ(k(*IQlVQr9=m$1wOF9D)E~BbzpOf3ZOao{SIh4+T?g$v# zp(Zv%7LsnNzAfR4*lnFlw+$c_-q35H4!@-yAB1E?xk!&Kd$2z^cAStTV_YIRZ$@H&$yR5GAFB9uA_c zz}9>q`a%39o@rFQ$x>0zdF9?tjliTWl39`8Kus_eu_KzWQ^2Un&A73J3LmrSojQw! zFDHwFPMH5@dFsi67@-nnA?4lrpPSw_pZPt?#+qs2#w@a>7;bKT&+UZ|SpkBlD84gJHNSO_nCx;!`k$D(yQExUD489`XhgK$mD5#0pV7?wE&n{HzYi z&y_v@Gd|Z_GDl05mtV&ywf#7-6xK1S_o~4BTR*+ZFqxzX@1$KwE#ctQqMn4{$m|J+ zi{N^O&z6$y>zTz^>=R^FS)b55Sgl*Xi>0cJSS#bK9u39et(G#vpX5?9fMCOelu(>( z8~=TMSu(hI0E&nVpAXVqq7D*V4QIdj^ir^c2UJHq!ImS_3;u+YU$7&d6_~A7cjV6Fj zLg+{8B_L@6UX6KU6(dei{e@1=MW%gP`VcRjc3!+8>aG zZ-s?>Kne*QC?C@a8j1sis1z*%mQ4_L2Uw~z8G|7%sYi$xL}q(~gbpUr@E@uq4Rb8G ze+2pVG3j8*uA< zF^}iCSaFHF2al8hZh(qRSmcPWMOM={v9;UA7VI#L?yx=$TY%gPq>Th@@M(H+ZWmjb zdG)>ykks8iBa16NET|KOSfU~e)cSdzzie*Tu8u)ux;T5iJ9|1>X6hy)X2tt?d{xWc zfterR;`={bol|rs(bjfj+qP}nHah6o?AUo@+qP}nw%r}u)}M3E%{Ts=8f#SDR&CUN z)|}jsIK%@>jl2GTNsQ*#{{k`rbGXDLGqtrQtOpuYhPOE6M(6zswGbClOIK)W(Vc?? z!%Hs;7x_Z7_&07{$swSs5AHQ^kY*Q_1x$ESKzEv$2*n`ibA2z-FAinx!czSXX_!rU z5qCKdDiv|=M>=vH<%wonDr2>}5;f9vMJ&-%?#bv_5tWrcQ1M?BNB|N+V9IeDp1+o| zvJT{|10-maeX8V%T+ODEliF77O)J@HV0D#sizPleky}k~3aPd`*lf3b@l8Cp+IS{M z@qPFnN7WY6rtHg1*!bzPW=ELEYIskFt4Qg{)X2ZwaUz5vAX1=g`uaF57nI9oaJPF2 zWFDutdx1M;NDaxN%m5b|rRiNTWZA`{-7lQ4viwQcpq{eesSDUy<=Z*p^<5rZDfs-b zW>u}DCf5IA1FuSkjtL^JZ66RjSEp%NEvbuAQP&k8IOiH9VNU58-wTrVJe|%jE~0{o z6E!fsUR88-Am12G9f{c?`4buG>Djb;(q+6r=0NlKvx8V{$N+k|^;EMjCo(9Q0ShB} zgAm!9V)g-1a!zaR0&oikM6-w<10>t8=_2Fa9Lm7PF8pZ>sMr%gH+^@iXynPs7*u$rBU*A$lCXx3=Pm|GB9}RLcfMva=v%5 zTF&v<$13-_Ovt%@s07h3zQx-bLu<=78}X3AG_g`~d+^Fq;RA4bO)* zGYi?@5MKnVZ#;%XZ_SSs140ZAOtXeWscmVgOmm!$<37YgMJZ+0-r-qI+XQ+vi?P7K z*ow#uiH{dvagkUD70%MBE_$dzG^HM|kY+d6XRbY|K0Vtpcr^vac{a?$2NWC70)-qpDMsN&_4e9&ZX z;X=Px>klOHn!84$u-N7ZBT%@lph^U$9=@;>Fu3d02OU*XJ6PXy;~{%__=b7NBot^; zdz_^zAgL^vXPw#@N7^7@3I&^WcEC5Xy(bYol(r$a)YL!5R`}LBPCYO$ zhx<3Hdiz~!a60;zo@r}KklyJ|&-F;ee(`JmX}@ABd1NiUfR2>aWQQFfNuO81_B626GX zss&a3rYW)`mgMc613hAenaOjb6pAUT7XaV-pYz#&3+D*TWT`vu(XP+y#0&ag6V1~CW^=9$E97*BaCxiiB|4iuBI~LsK zIqmKJfw&%0dC7QnWgbJP@C+h!%oOI){L1g~_UoJW#&ZpPxYNvfZiqGI)C`W|=m7U4 zQ+Da&?^<|;zNnPtpdMKpV#D>YfA6mnyTKLRaxWN16Yw-B=CV@!Po2hGe%ZA2dB2hk zt?Be#q%Ghzi)m&?<0npoG1+u&4Gyp_*+6)_O)~fF(aX_($^tf&O3jr@X_X7YaO+rq5a&x=oPA(Kc>o>wsPbb5_nWesP9o^UZ!))jqjZLOZp|GwiOU3f z&DjE_po{Z4(@aIgGgC32tSjKaUD(q`2cA?x+3%;$aW>yvHD;RN-iCc$n@8jdtmR~( zT)K$SJcm186@r+Yg+8yW)H7}&nPKiCwi~Qta@J*kF2>}fEBcv8r1|b)4}ib6Q?x!~ z2^V_TaK_V9#fUKjT-ml|Q|3M0wb-o*O;uZ__q^^BA(u{Md(&!6pzc+JQD$+j%Q+`H zh9z!p?)75_;@YIilpy)3y>vv~hf;tk3MM*S6ks)?+CMMuEW)PlbZM zJqyO96l_0_$G{T}Ascpj0ze#k?3!}#`>;ylqbDatK)bx?lr04i8Thv#rQ#Y|rlXVU z9k6>Y*VyDlJ)_LmW0vago7>E|y?s@<-7WdZ=G=Nj(0f*_QLTfK1FynR9wFk5Awf+D z6`War5+U9Ifi`O-ADZ|qw|d$~gI&ebLKbLoLEky*D(c^L*@7qK59qrdlh<0dEid;T zGro(g<`}xN#UcctfsQ#Njz#~f4l9Jl4sJQvL`xYm#K8q%RHsR}9XOYANIL^-FRD}cr z%5KQT*G-=A)op{<1dO|r+$exfvlq>i1!wAxX-%>ua5PZ%!6LJ!U9nX>Sj=**&2y5MV+X(lH5*(`ff>{&|;Y z4TKK;UAoVue69LhM^@agN*gPY?KKW!|3{AM!No{ZfYi>mmChEH_TtaQWyve_sS~(k z7S8R5OfFT98FjZT!&~!7uf4pD#C`pr8N<2ZdMGpXHIJw}sV-=T(0sfe8)5Trtg__N)344n0TJ(UD37Z7!RG zC*I0F3BB2MqLitci=|Y?>#y_gpVS5<)LVtgv;!UxP!h}krw47N@mIO{A0!bwSY;jU zzbTH#bQQG!r8wXURJ8spT}!oCR$%~CYi|BP5|Mr&iF7Y?&|bYS)6Lrye!n4ObkV5q z>Qc2b;l**tOxK_vuJOxTP=N$gZsbm?V z)c0+xuMgch!UjC}FtBkVi7)^>R`ArSIfKtIN(5Uv-9;L*IuMp9AxW!os=qufSZ$yY zsMFAd)e)sOvsJj>M|d2Vin%YzDNkmS2*p>rzvzGmlDZIxUf3%$iYaPho9PytTh3BM zVbV^l`6Z{X=nZ=9n7!$EfL$kelB?9_x9CxEn8rI9D%mt~uo!mfk`6#YbSD~!nbf@J zQ^Z>`CKG4pNa$kRp92(O${KIY77u7v*&+I03xgMwFcUtJc8Yu5Oj?zgO4-{sR~##g zeM}}o<`c#lLG0+Bs`|=Y_jKr1A|m-kU2r=7$!}F85iL^Eyc_W+K8lhq=N#qWWX=J| z$}Njro~)U_HNAAlbB_R19~U8nRG&tnJ5()wqSWj0!D8FA+-epOFTko`r~sIPW+Emu z%B-iEN|gup$c-=@Kwj0(TE93*0-ID+4?H%8rPmdWJgEhwO@5(psB1%B)ku{Zpvq&@aaJ}IVdDZ>vN*ZMh^Y5PhMTpZuHwCzoSb>KLz?u-<001t8?U9guTZDs|KTRJ~!ADwVr zq3O2pk=KQL$z%^BPKaysrj*`4O{^Yj5}8KR-}R3&x;s>AAe1U9e}n4OPKd*A2Rn5C zg~j%A_W*oc65qpW5$Y2X;&0;U+Qf6jBwu4JADPHg%5c8;-rrXY|0cFk;6$AML;9U| zHi`y#Yk6=9BD|LhNt!KMRCL2j-IhPR{_aa1F`re#^Err$IL$hxCe7XXov?oK**Q6A z)ckg+|DORX_KBWU?7hpjD!L>%OtFQswaM}~TdjP=$7mzIV_0hXKh;G?w za$Nh8DoHOH=flS^0b}gN^#^!guwMD)^b_zA}^61e&v(fPGMOMqA>VoRYJzrYb zKYTJrwNtM6Mr7{4vDyz<>MJzATNQN_MJIY91W!5%;AtiGztMWLV0`>FKu}#@-=8>DALv=exns zn3vsy(Z}iP!N=;iH?!{MX169Mru+9x4WD-lr$p6@p!xJ&hfapeEG}d~(wmu&m(P7% z^gtP{fb{lDqVskgXX4cM$_g;4)6uin?K5C+bWOuIYUROLtl#2{I!7X~A2lrs-;_lG zO|x;|OEq^GY-#n}h8;1s1+#kP2`#;IBz@-|@}VEmcTC!}YddTB<>mdY1Z97{&|B8> zyRQsxYg75)Z6}@eAU1(-VE#(+YbZP-RM^XSuWe`Ko9lUIq?*vS>$wmIpt|&YfC`Wg zCgiy!oWUoz$@vDl7uUi*j`pt86YM(=<;8jv9vZKmALYQmTduyn)w%NXbq$DXShg?;b&gvi*$$63=OLRT} z-5dOKSkdlV?UCQ#B05zxCGcRaX$u&=w_tLUDdF@|RkgFlQIQ^>JL52Q-gMh6njS%f zPV~N`^k(rYF_m3!L3+Z0xZ=l6@PN))q+DgdZjWpuNmp5q=nK_of&XV|G{cmmrb$C3btP#fcz4bD&k$h z@jljUVI_OcXlJaA&&vNz6^i1RWUDFz!zpVsIx$JS8e!5}1-^8uwo5WpQ)APnBJ*#0 z1G?bsqs|LU`;s|}KpaE-Gd-lt#xSx2^wXDV_6m3KUTH_4zz7YL3 z_w6&*=liccUh|3gBX?^1B_c%3YPnAsAO$tQC^3hLb#zojF(zDYB=OlYC>IAcw@8)q zYF+arJ(*pbh4tBN4pp=;?PJLNM?%8S%$6{&xK+^a$32UarGaQ=vIuy`ClqXK5Kox$ zzJzyP*^+}IdyYK6X1%0JUvq||fH*r)7^nB3O8(bHw zzy(UEy}oc@m`hd>GY`n+DxfeQP3D)o41Vo+chc@UeT6q+xzX~mddd@KL>w@Ye#wU+jMMtO+nrQ-!u`hq>s?C7(D< z$_Ah11%oG1)xv*Zfg6Z-$U(vML|+OLN?xp5vQSt*AQ4YK{_=!$Woz09PT&b?=ArTz zNf;+TwuwK&A|RV}8wdm zL~Q@%ESDFQC$LF%BbuQjpwH?J4eL%Qg;i2dhJCx zuMyspV{k1ws4b8!+NZEbVets?oBp_+WxlCgL8RU`Sp4)4;|H^Tj${Co ziN;W5SqKh4mU8^u-|Dda`y1}GBTy`BQvX`k`0D_sSt@C0$s$znYcd%cICaBp#cb4n z%%vQZe#Tp__p&LLdYf_`4#66aZ#8u_f^z$gSeB7;8&funtQQ3lritWTNnG=wD(2ka zP6mu28$#1uhY(9b+pJN$Hj$tVW?WJ;DqMOgxexPXEcr;0Iu}L#c6>V$U`xkTT*hbZ zCtW}oyggwvCeeY+t~3Uu=*_krp=lBPl`EusV|DAMhZtT?I9i zsdn}D6_9N*{iQ3U#bR_Ed;CLY(AjB=xyH_%27z4`!rW6wll(Q1X(@O(xveLpd#Nv+ z_4Mj`ioW{h*#TGqM}VB+s91*Ty6D4-pAtap%*BT0f_URSl=gzy*G;NV4&4Rc36Iz| z^yHElLNIwrJyryjOHSaocYNf;st>&fUr?pzFBA@^ve@aHD%Q4A&zG&XDMPKcC@$%z zp(?UFXvGOulb{K4lNOG72)qxGp3SNAZvJvmU3C;(5vay@=4k3Wo!VQ zO!qM{S?hl$8myj;&Ec#y?!(N$@n{oLQxyu*bz>_f0t^GF5zG;VUVqXmS7~ba&H9&N z)6Hr`vphR2$jSJW7)={YMV4SQQr3d{IwVgrksd+Hxhaa2EWw=(X z?!?^MwKQbpG7(=(l{IRwWIDWY{o-*|gOWpUoEp zx)7D>j}v0>=#^F)p&8Zc!$|{~j6c^zD-0JLY6B+KOS>XX?6w8`ttvUQNkFw0l?!LJ zQn%+Ni3(|IY3FKILi3TwIg2Ln>+gLRr~PfUG2WNKyn?@(6OoDLbaBSeX zi8qjLy=iH%&r!~wetfTmfILi)U?D3Ocx9&YtI7Uz4duuDaIw*+kRV&JZn_ExH4U`z z@-@}k^44G6j0AKXo~w2)U4S%eRm8Ay)X?PhQ3q65$w61EOeI}#$^3mR_W~5uVU0M$ zz)`+4)0-CBjcGPRP-91FSt$V8a+-{%@@{2Ao~(@}6c&O;W{&hEeYX?8+%{0v6`pcw zrw#joh(N-j$XKZ7p*sbkRy#ugufb+~ps_UX7yqsV%d-nRdl6JaA7DmBdoT-Z16#WA zYaoGHS|6mYaOi_X44!`i)ySLR8iPGnK%&$}F3GAO2C`reTGcUJKs6edT zcukiALH2k83HRwo+PJbLuwXhYL9YJa;F1O=DzZH9%gir1HWm!K07jj?&|VIVJ8a)2c$XW)u&*R{rx!EqX8Dsn@Z; zWh+s%+YwKosoO%aJ7*KgthW=WL9wkj{!a(ohX8nAF5+nF#oeTz`FZ|($gPd(qA7k0 zXTaG8EMD@Z5(+C%>y*61hVlvp6G!i#)cKs`08?|c%`42h6+q?eC?QU2NS_9rop~)S z8C|Gx!ZQie)Rsi^j7*~^?rF9wm5zXF=-8$e?t&Qq*7;hR#;PFpM$#0%eE}mt2D~k+ z(Bx9KCaP`mhyk!5Fxe<3B!GTOFub~MLdpo+qz{APclO8usg=oAjx zYU|JIdjW+(yQ4~?jKm%0-~e>;>L@3N;SJpFuQLpGnBR4}5fb^h3Tew!AGbUbg)gJT zYT0nPgPBT{FTy{*uZ0u*;)L5|+j3$iH*-n!sp;hHZUm}ld*_j|X!;*9CAmn8d(zqt zyu(}s0qIG3d7-!#I3Eh%G&T~GGtG~74S6?74uA;C3$xhxB3AkgOhxyD+UYHvjY7Ur4dKI1)v4V+Mb>f| z7c^htD7Q_mBR+Ox5rjz}EG6PqhsQ0wSYSwLO3T` zsfK#?v?O%0WeP_N*TJ^5tmma;ip;R*#!bxxwA+6}w1~8c!ghi*i(YI0)sR>oI>>dz z)uMolItK+Z6>=Ph1%Q1q{KFccH5ov&59*6WWy7==O4@xi2+Xy{`{X1z z@8|J-@vZDA8286G{TLTYP=g$b$?sMH9LQKO^K-DhrO6|%AbVR>=3c+zG}t3(AA_aHxB<#5P}f`6>N0|3|Bo|L!} z*PE~^CmvQas{JR5Vo*@|xvq>46xA&$ZI}p?d(!O)n|5rjNAZvx-DF8*q91AA3~zD& zV>!wA#EhN@Y=cPPw+wekex#GUdT)*#f3Y zl3_!5%oB6tp&9&{G*n2z8^Cth3_fxDTQi@Z>@H20AM`II&Fim~nD;6N7ncv6eGf)K zvEuH!^c}%@oYwfUj_BDJg)UN^ZQ>67;zTsr=-POM2g(;nSpVWx)BxlM{L(Xi?4dV5t#1pc@^nz}jo0AL#)v1CBEvw88rLc zIgO zX*Gbu5}ibQm7;nCJ)}vx(e%qHdH7VF&nk7;znZO}3C_eCd4Dr-e5n#b{xMxsPO9e# zqB7|KJ*-_uTF*a?3#rjSNG6!MJ)Sd_TNh`DT5(^ELzt0Z1V9Hh#R8IEe2B2WmgCumo$#5P9v;$NYi_z zdq}6ZJ$5ZvEcSs$cttfSDKK)zyYpL~euQVP!xe$Ap+N~vq)Mc8n{7bl0jJ2sV9Qm@ z)!B$@noM$b7I2g73G`&A(Vqo;w5}$v5#|_r9Th^n2tEZ)WkAP+2XCoFF9)j$G?~hm zPVJi#%9aNYPl%bva{-i%E1zdD&`$l!CoQy4>zuFM1s3^G*o7o-Tp20@$yrlrJb@^{ z0%?v(Q;W^39k*lI)LMTzeh*b@v;W(+3x=un54sX7CV*x0l0EZs@GL(;htM23cx|&t z%>NOiqxJL^j?0C;u=;k6W}~92O6A3}xQt0Wnc<%kO?gsYazKw5xb4&X!^|lsK`5{e z@6&jts#>=}S6-PDCTf12=e)Oq;W3ICja5@k+k)0Kb&Z~s-58>V=GFz0X>mOc4(;z@ zb9HrUaR4p84>u1D!g-()ScNjq1X!_!8Ovj&vq$O?jEWb5^;espti6Zek(HX|VX?(K(DYd(4)fd*Bix$xNKP@?7 zv+z2ukJb`SJn>TwbP50LbKJk-l>MsI?wkO5O91MrSuc61x+*~BzB6~2QSY&2VV#S2 z)7^;i?sRe9;E$>>SOZrOpZ_^*SF~Fq&HmxWi!c+Ke|Ai6(WTfWLHUF&sPJEyn=L+K zLESKMhie;?yOO(h#q79*(7tGkt-|g^8YueekZDn43RRqrgUrXe$M zHUNg>Omn32P_@?ll7n#!GN1e3TNNx6_XK?-F~>|V^-;S%l+V3?WjW)JgxaL5`Bcsq zjMtV(%^w4!Ezepn^c8JB7%AvwEn0?T@L4worlAAN0+p9a)dcw0()AiBoF@O!!3qt< zc)?s?YIMl6)reL&uq;X3W1NBtN6ShK8Ub=97z5J~bY4izJ?RDfKOFQ+aB(l{9Adr? zO;9r|8}Uh1$f87tFFdWSBNfhc#o&tP?}_*(hxa0(l>E-y zqlCxXyMJ_wzc_CosTK^zeQ1iB8Sa9_1tRFY+#&*9S<_{|9&y_X=a=iQB}Oko7Xb`! z{C^&BSCrX~t?FK_h)WAII0M9kwMkv%bj{m4bn%(}5u+^ycryF1bA`6p*Akt9-FClW z$2W>Cm8{yO{t#OWvSgM|>R!0`!lq45^CooHULYi`U)a88Oo@xa!=`O^^wqBr-Q}$# zPCJI@p+Ol(@fUBO6wt2eOk-VvaRH73>VtyXZF*`mcahW+i1vf`a`;oBLx86K?G$^h zvW^J2hvgdYVg&fqVG$^knltm!b?(Mko#dzq^=9mS+9!k?lmO4bTHr90SZ_7X(zk4+ zXI%&J;0qvmPngQGQ}73~;=Y>??;#e@BbZj|sd0bH(#QbJHw`G59B2w~HsxrrfDHO=Y^nN}~+o zO|^P7jySA7cDfROC>8|W%L=d_63`2+wzoF^@~H+i5?s#yN`jsaVT7Zb7H(iV&EYh6 zxVvs)mIa@6JDICtJ(CQ36mq#6s}8;4PQoPpwu5YD+v{S=y_gQsz6a!`}!WakvqaJXJTg^rP(ZZa3};IDHs_^E*cy>x2(PzZ$IxH z&KJ`}a*QY$AofIl!2+l^VgIlI^YLeiUj4Y8dpTzT@4gFNHr@uxjw!%NO;cTk^T&OJ z3q+n3J8BYqL1%5k(Cbt8VFJDY7YEO68Iq3=oKl372V;2#9+G7g0-m88ak+&igS889 zZL6N96E9lrP6Zd2mMw5hxVb+pP_eRisUx?Ds!-(=$P7Vcd4Oxy^rVG?k3W%`GOq0U zB>5i-eLYC94=o%o{mz2AbIfZ>dhEUb&Z6@I1X#F@8W|uK$kxZGnk3{l5vXv#vIK?@ zd*RaO61bI?-Ioh$73>J_Hk3XZGH9gkQfjAl@EDbjSY5LIc}=(ZAonW&qtKUgu~qEt z8>9X(qWbbYaR4AoA6GwS-DC+!(4f%f18px~J>^qW?2ZJv2SjLd9_neAFBujQuR!<& zq7_C-&r?J4Gv623P?MY!>IWq34zn154*N{Mp?c_)Wk#$$ZN!XbO75!EYr0vnC&M60 zb9Ala<{mhuO$x=w+A|_(_TGjk3iuFEZc(;8J7a7U0Rbezl}BtT=*rK#F8%0#OV4Z~ zY|Lpn?6~$l&DPzw1a{=A?RsnqV~euRY}PoCQl^7m5Ge#}23OW5&N9*MEZ>tF3q@~1 zun4kzvD}j;wz>;CVjfDu5Js!n2ja9=D{>v%U~a#+{RwrsmGUI{Cdp@dN@4QdV3-ID zy3X%3UO>h8(`hcK-Qk|AKrvL;WCE@gjnS1{Cp|o?D#6dD&Zk5p(KSM6-Dn zCXrqRb8gUEUtY50*q1`qdOtX*QbmSt{|O(>Vo0|zGP@3fcI!)`(OLmhIiMbZrHsnv zXpX7%9X$xJ+G$Ovq%AS;z>k?uw2v&V`8S{7dk?S_(QR1EVa?m0BoZGb#PujMU}U)( z94{Z-dWCwz+mCGF%5?e+ah#^3+~^4p)>a=A3BFu;eowDUCi58U^f5ZyVGStXAHGoB zQF~Q25CM0Wxg;sKnam_7E=F~wi7%LUTmSP_cE-PgfeZ@#LHm$Q>ouv9i_w%Q+|CJ9;+hh=o@k<0Y zC?pvIJqhiqvJeTL48~uEI5{6FYKdqd90gEgq$vTm&z}IMn)-D%@)0gKdibZok4@+J zBJm(UwMan|kNhg~EzR`suj1=^F!$f={K8(UdBH$0>U7@T1sc7P8$3+*st8hN|+T?x1D3mHl+icD8`rWBk0o zwpic_yfREUWHiQAw_l-=jkBfE8h{$@mvc-!JEN*|-+NsVw0>mpi}q{DrfEhzkCG>c zGL8>$5|2KU`dMG!olPzzQaks5j23EbO??Hnf0#5pYW6+$V3v*XFk9|U8b#15#ccpABfm$+&sjN|DG!#bp+V-#}j^d$W0vwp*dI5n#jEdWe2=Ld;~1!ncC{)ZY?2%7^2&S ze!OR;!~zsU6taIM1L`_M3z5QfTPeWy8#jqc6kTb>Ld!ohAhGkvmA0P~Byt!5-RQcR zIoM=b9E8aar1Qt$RW`$P2EY)Bp*>-{MX!h(zN%PYECt;mk?2PmD_uBUq$S{n{B^?L zw2shq$4wWicGe9Gm!HTB%X4FPQbfg~N1PP#`lo<%-vNnB5jN7`5lBW?REi&LfgtMF zSnp&8N?&vW1WFpSZ3VL$;o#U|N1)Tz1aM%!KPRW*)cdd<3hS!dPizeu)cxONuMzA1 zt}eCsU)?sI0X!$n^3Y2b;pv%9bN-dhMv?T`f z_|X+Ln8>X^;)cgm>_ISKn>%!>wlMuH`TrawbSL!nNoxdOedoK@uR?&skgnx}w5YFC zpVIdJ#WENv_e1#b0#p=fCU`{i;3wP)bASqTbq|24`K}E}R2`Z{nX(kDT`da*V3CB6 zOI0U1^wq?|)9)E_;mkeJ3#9e1>RGXQ2IFVM|))kc)Q>!eRY?3J-?vJTa8d~SAqr#}1 zsmc|CL_cX84oLZzz-l_r0@R5!mFKrB#ix@;VO@hnlzv!9;8L^_H~Fjf`1eQ{H_th# z8-Iae)8D%SAKydWdF3d`+CU-8E&hh z+$p3l(hK6#)}YOfqWL2|^Kswv8qb;&GIxW?tZ0{y3ezMFj}Mb-abWx?U}Zp0xpdge zPo@@=`ulKtgbI$sPOD0~+spBMXkR+l#L36Wt-GhPWbr(rbH7Ts_>5PYFT8fq!1EwJ z26xW&0061Thd3K8HCmca8PWgbfm-76kt-gkmPu)0kmy5hKgNT2Y{lLa$BBLi&zG!b zN?8)&xde(xw>91is$x-7Efib$Su??zYXt(`TJ%pV1C!Am7Ll3_aFncO&4sm!<_g zpXM%1T2uYNVIir4iIf)280*E&pY<2%Zy8=)e+Yz7r(p4!fvlG+_9yU2B4a_JkJj)< z1vR-rta9^#p)-;j^Q+81`nzEJm>(o% z>8b|_0QbD6K81u^W$ns-xX#8hd$#-CpH=xyo(bh9lcQp66q#VYIJHxtt+q9Qtrzn) zkNoQG?Xt`zY$JUqmZ_z)K;i9;jyeDvvPW78!PfBjZ>q)g9u$Rs5hTEy;hY-ou~0?|&=MGgbfp0g^(WRA2uWs0;j7MIrmo)6_Il zH5EVy+2IJ($1ZP?$!dhHkGQyDUqKmp>h<(gCg+FBKtX3krc+sooBf%`s+!@v`eT<5 zBIn_0YC~Wr%+cZLwf+PceoASvfk;d`F059}#IIR1^=I0aNXu1(%9_0H0(AxIaWc^y zGziNgg$VLNcq>z8KWGsuX-MbT3ZK|%@*V)ToqCR0S_>DA`C7}L@WhJDr%vCl(^f`< zoCt_xron&S4$+i=0eZCGzd!hfUvG-NyY5DLw&#PLNi#^%nOS57pf>gapMczp?sHh9H1pf2uNlmf}7c#5^ zo$J$R=3LhiQFHV-7y0@eVZZD1%o#gqvoK%M?QTF|@pYdNHNOH{x$qnB7KMkPS|n0& z$kq4&yT$;iV-x^uo`4MHSuY1HYN8H_!>;znc462Ai^>9jH+4qM_SIf};Cr&9c$8 zp|MS#1aKJJVz#VmxX2_?;@xV(a>AjTR>iXbBAW!|FTjp`ZT6Cz$eE(=u^t+|v+7f^p;5l-!%D?bD-PvoAf5*Y8*Tmu381HdW;Ehs zyyuo$(JjS}S;m3gfacya>oVM8nYcwDe~SQQVICC*`z{0pY}lM&flAblY~#*=Il3{2 z=56T9dclyd{+_dD+#={`j4kSGmdS*w;skC#RwQhE6C8pu^NFH+fnw=>1%6UI%hOa0 z_4&eln(d@G^L=RguV3;SvaOT=Gr!}0?OZB7S=oAO`ew|Ks%FF)Q%9n8B|LOZDR~ZI zkZa(81XuIGZB|F&t9S+cWntxQo3SaXA|lPa?ESUW_>vG~KCW7#LnI_iDiQpHob=Z@ zb%M}=P`eEVWCG~ST?2b^oKjTMR8dx?BnY8UJm~b~5b3!s5J$$foUsr9!>i!H!W510 zpp^kzIhAO=Q;s)7I2n5w77Dli-|S6I`1hJ`!om%%NcSW629Uz=xlTVY7DwrooWNo% zPcfu~O3<8SSL|q!O3KrRYG|>dFyYg|^NmGmjF%dG6(Ld&jtCK@C z42rm3-wTJoNK@Ah=9}gL($bjH*VLayqM0I&G=FZ;SRnj1?#A@7a5~Ly@uuqvpx~$W z)o(`wmR0tv_o=Gm0)kDDqf;rGofHYfvQv_zlshs^lA7OcBkm7*3lW(HYjeuIort*- z6K{jg>uGkfeW(3$l&3*EjIj_NvLcZ7OdSU+>x+0pj;E;EDXbfBvm3F|VS1K+$$?{f@K! zbsr`D1FT%`?%Z_m78aq)GgH#Hr^Dor-;%qB&{~O_x$3B&O+_)o`q%tcJ$sJH1=77U zPH5HYi}zjessV2V_a-@j#&syPYCRX9`L*2u-`%`&wU1Q+6I{l9=5z%_c*JL=*g&bL zs5Y3XK}W;s*dpxIdCdV0=1X1+CV@H{3rdV5>R)|ogV;hqDQGkYw^w!@%;f-TwrCXpIw zX@|aF+Q)!%d8T%uRF+KZ%5)~zT*#cko}vDRekcAcW5}MRCou0&k8A|gDZe}J z1rx`v3eTu^w6xD1R&qU=9SbM?<84lXK1rz-?k#8?)UF1gGeg>4b(1}+%>QMA>Q;vE zwr3E?%I)TzR*TcySDYwZgZ#^$@msH0;aAzZbrWw-swX~ogsW#ROy73hk7XS+$!7kdx^#~N z#v5X;2tFP#tDlCcPkFvvA)Yf@-la0j;1r@4XWcLu3%7>`tx0Zq(7-yT-)KOYMc=ho_ zfW$##Q9{xoF-F@q6_bhx!T=C#-@dHLS_I|sr@H|-^AtI9p=35ba#ih=>@y6BG`eg>c z;fn!IMYnT|NhA^E-LVpjy1K)x5sMhnsfUu5Z7|gl>TB!uI$)sE78i6alYO#~oO0H% z<_W5$r^7d`7C3L?r=Nbbi;1v!KRQthx@iIx4}xkfLZ@7^mnqIhzj^OgGy|Tef3*hb zf_zMarHe`c1>j8|mbDaMD7D%~7N|>C=uAL5So<2iDHF>0n$D@0FU-tPZH>oP&!dDY z!;R)eH+{?GibB+1u3)%6SlsG0m5STd1^DFNPP@$X<5;)>)0W&!!5VW1#hxuewIB3_ zM_$sGE6Rtgg$~-6Akn^?>22ZpIWl95T_sTx(K137lU_BaG9ovTvB#_7+#m}g*b4y8 ztNZlpZ@;Xo!|m7Icp~M+XBez)I=S}{B=vpT8uLIDoEYjJ1NfhFswit^dNRtY2x zNRxD>Df<2rfj=m)p4_QYkou60TGBv+QCzY>85B-?aL+eDr-?V=m|g>WwR^RFn+aE& zr?V^V+Eb$w7JvP&2e5Yzb5vof7mffOhtg#h8_Vq*R*{G!=a*`r^D}w9LJvLZC+*AI zhL8wqtA|J&Y?p8wjv^TGi}#;=YO1w%w3+pfM_K+#=3$%`sMcuiFbw=I5@+P79WrR2 z_H5Bwba}~?)Ue#os7S(}7hMP>5?u#UVfk>*%>*Q~Pa^hH&8Z!U;Bg2GL|%Z!-|qY_ z2_%lEH$FV!q00%8qEj%+HvB$l*8ND2s*%k=MzAwVn$mPHS!9hl%OpxgzcH&xn4&EX z;>93)GPT*fWb1!UwSRN)S4#T*l3EJ5bzL*0)iHsbIA_M0NFq$5o_%o$<#!=!P1!?p zTATr*Hyidd1xV1fgnIip9y0r zDS4-fgCq1Y>y(!KIiV}Q$r#8_T+^ziE{Z2aMh_M>mnDxRKy_z5^2JUsLvlW$%Pg9d zLspwYaS7ot?Wo$&)8yQ`Cr)B@oJ<#-{;5U>9A@Y%mHE zYeQ*FW(EfTLhKFXc4!lJ8aO7+QQ0;KonZ-aM{1Coa5BFsN#~fguE*tYN4nd>p0MVF zVvf^9tPmU#4)cGJhX$^vjbv6fID35-y*}O@glvA}67$!E7rAZcef!B{e03oJ`w6aj zUcp_Dsq-b`KE9@rE8_uXwW|c>*Rk&lmAZ2qY7L!7uk84U+4g4BybK3oTr;m|-v^|9 z_Z+Ulwe0o~Gxg)dfbt1ZQdV)3UIM_zT_nkRga#Q6Tjsf}*P=fJ@`m5K`;M6h77!$m z9VD!)5e+Q}gI!);{-AXo^xyJWX@=0F0)3FS&mplA%9V4WM386F zB?o)dPOe&$TJHc*H3lhjpkz3{4jT-4K>iE{J8t6~A-U9LQVHYgH&p()SF>4UCQljd z@2w>c7}d%JaJlIS%%7%_?oh?Jc?2VYoCB?|1-#xP%kd|AQ+HJvpuE3o^GNp&&Xbu> zz~Lo5^JVRQf4fIIsSbU4K?8JV&`f*i;)ue77tu-@Hw^&{$-j%^Kzsp^ok`p7|60#v z$#X+zVp6#cgsCvL!h zmqkvR>i$2nzA;F$u4}ffY1^K*ZQC}dZ5!3owr$%sr)}G|tvl~L|GxWgMebEqXGfff z+OaZsW^cBXXaUpB4iyG%9$eLKdAc?Pl#+AutvC_|MF9h^R-X?pYJUoEIcU(0M_f|@ zBH!mNKYWnAMKTy_{d7KQW0e04IBI;z1vu1fcr+k?(d=X~kTpIX#8ToT^0|o*qIU;{ z{1(WFf&KP1<`Fcq<9+9wt9M6<0UH0uJF1k>I%-T%Wn%t3#AEbaU9dt=*kPJKq+LWa-wnX#B4qr$0y_Y+X*FBdwwz4xN9z z;L7Z4urQ>L>Zt6rqVxs&CD@xI2x3w3suB}N-eX)~bz8{lz{Jw%rgy3VSvvfUw7+>x zI2cqkVy2b9j1ZPyEgS&nU1w7D*Bir{lNbe||l6RjB>M!6fFKIJcNk8z6Hwnf` zb2)P{>TrFSGCS$oj*6~1s^^_zC3t8Y)SWPKqHn5M)gYQXgwqw!CEf4tgdc*;S9BLS z!iZ}(=?Kp`wwbY3r*fVWR@j_v)Z;)eW6a#4m1V`lGGCcuI ziw8|v1X{rUu!awH81&{OURV|xqXx6yBSW1Zh_h4-@ZrqHyM{U_C6rCNrQRnH&llG| z={6C1Hk0V0I7(~kG%R3zn^$R?OUU>SnlfiAVQfIZrO5G^8@ie~e%7pLS#lI?{8{$AmKK z>w4d9Foc^pE5#zUJUcygrgxKUZLQ`_VnO32X-iJ5CCxUW#^(A5I#Qj9E9WLN%j5h2 zb9F&WY`RCx`{`>vmxcM#*kKoVa!SWHZrit66Hsu1c_K@vl2pa2F{zNe$!9Z>e@m~aJv=+tK`#me-P&}wD$>s{R8FWO78x@ ze3>v5AQ)_2*Hws%54NoWL;AZG?!a8i^(E?*KgQ3Yh#T${b=kW5cUoKGqC#x%P_q6J zsLbdv{KVJZE5Q++@hsW!f8ItC<78fTyoS=)0`qnw6KtNS7glhYW9tC*OcCBn)93?f zq=`0SZM9?_apLDe40_@FxCA++wt0cH>M-a2v@3}$h>brIc?C=J^~ZVZj*1oKkjC)E z^-^jl`JjF$m?M!$yR}^d89xvh#!7G)_E^pzsA_CvgM+6QeiA%>?**_BMWR4+y<|oI zSeobdc~$*&W=kf_?z^>G4sj^{&-DtOM>DR z)a6c#^hZ6r4;uzO9pZn-WcQwzJ660iz!>6az1>r{aI%w*;c)`=j?XuuJQ4(vp8^|m z+F1rp3JpeN3ceiNe_`kjDeA7>wqWLg_NNT53B;zkT^Of@=CBfw-E$5EHY+h?kiCy6-f>dcP8z}+|tu_Ug@x_j7pAQ zul2^poxG93Ag}c~w@Rgw2PE{|8os;#{44Dy(4Z>}iwFh5Q6-h&53U>n$Zawq6dl?Q z-_~p}jam2R@17Suh2A(kveC{VCQrm0WCE=uZf8P+)2>YGMK7-pRT(buftx%P76K?* z1u4s?*WASvIxZCyERCFdh5LZ%_)~-41Y-`oDATlPE#0;UQ{5CTE)_ulJI4BN>Q33X z`4Q~(^^2tIfY@YLD@0RxU6&p?-jeANrIi;(5-a^<@=FF>mt#L3JNheBB{6TXLma4q z!CjPHD0p=YZGt|@BEpK4xGG0JU{r=bDMQ7QX5P0}?x=B2)_;X#Q#E`Pg>KTZY()n3 zKC{-|^9TMwK|BPvH`spwoL=!k9SP{^7yj5=O+>#U*MkDs-MrOi(f?Wv0N@bj-StA`52K zgzrN_v9Y3A4Z}JrX{h2V-DuS$#nm}vR-%y~8?*r@SwOaY{|rBy9~q3xC+hj|FA$g#!ic~=OG@xK-L zJ$xz0l$f;R?76UK(F>=>_+RrAe=Za($W&Lt5q+95KVl_2H@A_98u#tOn1#W0Hwc&Y zOF7mkA5|p_!AY-??Z*3g)elBdkjt27fH9d|XSjQoWLMt;`s0G-K(hSFE{$eg;J?EC z8SYh^j&?&GDa0sfc*F^^sO`ah4&}-xkpd{5wDH;1;Zw&KaJ;+1yMP^b9?=st=Oldw zjgy@Xq7>1i{$3B@icThfCE(FbIzYfVpz?37@xR?Seiz2I<369|qV%aV0HJ)qK()yG~35-05GU21i||CO*@1FUiGLo-e-%Slf7h5W_t%0Xg0TDlY#7!O(6-_jAHJ zScGdp7s22jGFcl`q_T1_gZMc@_lU}$wj}gplj+L8gh#QJD`hf>s5(UvLg{AJDYpzY z%k(XBTxS0R;yiY1##h%CNO+!t-cN4~rkU|JNgF=^fGnXU&{*8%XPwh?F#P2ZUq${K zIsUOnK$aW3J4IdqIxB4WYQ3eSd)hX7$mr;|RQXJu&)e1WeZx4rHZ4yPsmoUQ+?wRi zvZo43G*lQNECn6vGE&;@bd^%HX)ZiA^vR9d0|-*GS{wi6z#BGT!Oika8VlASkF%gP6dI)21_el2g>uC**oY&r9{{n5H zMMY{tlWFd6se18d0;lWq>Dpc20J9xR@Hyi%1tpkV6SvR>Cu{n(CXP0b`m>e zj3_@urSD^S^tCFb(`m||Jla_rpp2LiPZFhd5H%>92qkHea~3xZmh}uEEUvm> z0tBN@XUyz#I3o_Sgzf#h>6V6e_??72JHzB^Bm_^aNM8R0``!rVzVMxK{b6R2rDe(7 zh3m7@wo;48`}DMgsA#r{M#-+Gz@m{3wmSpM+Y3%2VtrAXA0f`ZuU_8UgY)ZaxZ@9J4O+@cBXPxH)5zWO3SLxqt zH?H2@5bkV)3ben*Y?Fh!81<-L)7&UG54Wdt{eY+%?y$ARE_q6fhpk_ir7TBZ zQ(*}0Cog)w>Bl_gA*a#Qr9)nBAMhM~@S#y+4+a_c{5E-49O{@&r0x{v?npxP+|U4) zP7hhXK%NNGEv0~o-$CA5DARLf1H3c8p8f7y`5S4%A0=I8^G$z z%dvNt>ez1sxTLT|XZLc+>c{e|`>o|if1_aU0d-_W}di=A1B3V#(?A%?7NNx zPCD&UA1|e5+ePapNAv;}O0w69CM6Z(7e*@f6zM{(Frbj|b{4be7-Eo%tb>zci>oUF zQLvfJW6e2w9lGB^-+G|FWRU_;X@m39)I~X(Qec+zp)%CauRSfD`KmU)#vUesUO&5Z zQXnRepH}uML8^+0>l9@M^ngY%BPA-FglMTBl0PZEBK^nA84r~vGn}#C3PLI0=O$l@ zb^X3NA}F=+j<4a0o>cRCND|kUQ-;_t3*Us%KAGZ=R3G64-poade!PG=`VOfR6D=ea zleMm=q_9QJ5ZAXv*UtxX&3qG_$!K#(+W14kKdXZwK|%Ny5`wIZegO2m546QlF{8oR zT%Ux>ASmn1nUBxSAG!ZG8hpzxajVL%IpLa zP)Ao|gUp6!X+My02K=PK85KRe|ET7h*bYFY#zL*?G4=wpF0SXpWNOjJflte*Ay-jw zsEbOxRuckOCbDoV>9ZY6XhaE2uvnA3o-dD8x8oRlLH*;&AHIJAf3UU8in3TV{xJKN zL5Hs0vgPB|xOZ3}j@?h$`~PLm~!q_rwJ3c#6ycECMX^`@4(`kuge z9vb!S%p`_l*cD`eHe01_m-{u+A=qNu1u)*28BaNZuM}+!W1Z>J{9&6DPcx;>WqAwq_ty3GZ zT$2KCXy|e2B$1e6ecOGg>i!CR3}EO1HdkwprBK0NcS%8}E$9zTbyDdy z5ninluiU(P^h5Vxm3xBOtU@BuHCup+3dUN*`I%lUBvet*C^=ylV4lv<=X2s4mD|P< zV)><{A$YwXA2^e!{pJ8qps;^6k_R*WPaX@i#w@1g8zNi->>ZWSV z04`E`Cv_uAXs|1~%OL`e^Vx7Yn%5p&YG#}k)nvQBO>rVAGOlM4sO-53PbsaedFgEd zJ-J(Y2JY_i{XO)&p++#wTGw~YzrLtE25xKj5de;ZJFc)0(Pr5E`YB=}Ue$2P30u`~HZabieIm%gp6-1ClAcmDlU(k%TCULOY@{#Jc=3QbF( zFGtpO34!qb`$V?i#|7(}P3nkVfX`}ZGI=Uqjl-$|^+=J7}_-m)x0ioc%Se= z$;G2;t}P!JwfgwWG?99C5~a8j+=RxNs-!j|Sx6iUX0gVlRLmdFd&YecLeQ}zce%C} z))VZg_IKt6TQ3fT8W*Zzg$AYAi<-^NKA?m^nz}_^UwdJUJ40n`QqpEh+Bm}W?S%dp z!FHCUX#bR%n%ARfQeQ;DIyozfRx`&Q^LqbWk>vD`^ar6Zn( zS1h>T0Z+5}OhQwos;_s9Jl)TPOQZ)%CoOe6rm;-VCLJ+dXljLC9VWaY@r%!jah36T z6n`0}VKDyjdg90paf|NGtOQPrP>|FGs$RX6Z|6~nbEC))q26l*ZGtAB+qxSGnp zwMKBYrT@C3ey9oK{KMwS)RzCls%X?ONd95N@@fK9Uhk;>3oCJbo zhb!~fm9Ato&RDdbjhSaYR5j2?ZOr$c6ZG_^o3MJwd7f>?7i{%d!L$hi zUL%0*aJD9A91JvB{IB9jE;R#6Q_aNs_}3H-qZ}2;Kzm){#@iH%WceNOHRHYVEb)oj|WJ4csktkAa)0qtbH; z6;{pMnj^rM?XjE3)12!C!ibnmw7Y>YLs9ds9MhS$_jC*TbV%ri@Y(smvo*M_%)swB z1Wpw1rb3yz*#%5)Y;UW_xWkGBS5_USlS8aZl0Hnh>`$mvWGS)| z?AwTo7=|KsauYMB)Mc8w4tVJ3s`YarSHP7ru#dwWTPpxh1|O<;`1V-bfK2Kx3<=fG zAU;M(@gYkHjxK!qf@zYS?b=Ug15Wuv~Oufglyt)LeOoNFf9%+ezcwVJfq-IBuMjYs=cqo3QyLgU`xG${gLU z3^ySX&V9Cvm`_SBA}ux0#z+>@>7*toRY(i>rT7Qy!N-BG5znVOc`B`i{lOu6!KtJ> zwJElE2B5`RT_U2>wKzG0KJfF4cf997o)vHf^z&T}Z*67G><1&Z9gXP&gpesQx%9H|5ZQv^{wGIyM0KordH2gkW^zQK#m;{^i-B%`}A5SMo~ZWXTLtk0(K8)`sk zj=8;&wgb=WX~d%78P)RGH2Z>TrS3vGQ*T1s5z$50SqXE3K1WXI-p9-5Z3Kp$evgmp);8c7*9F7l}`N~C5? zL!2K7*S90|w@oo8h66q=2Y`C^vHY znC(msVLKzM{UL;xL-#+sb)Ez-L>M^Y1YZh(&vaNXo-K|uTYyb#7_P|8F#%3XH_zkF zdwywL|DdZ_uZgZW9#hBO$LHYc6Y+Q-p;vFm75xvdzZnY% z`H)9LnXh@V4s$8Ks4(b3)A;cM}KXF0LHI8 zXbgZZL(V-=e0&UN%$E(1N&YGmmhS9UIHVHgf^%ya{8z>y@gE9^%<^N-dIsNqZ}%82 z*8mGwW1W4{nJw4&LoGa3Wg{+ANp-VA31cMJ@+TTh=K&Q3oRigcXPRq?DbM6BTQVoLl z;xjLb+`C105~jzgyVs|POeHKaJ$Qgf13DB0cN}2sko@KCXALK=1jPKwM_{4G>$^|( z8}$jL*b2m+0|?3B(FXaRa<;Jd?V&7tT|TEC{S4q)h$%~6w<7X$H^%Q%V0j?y2AKP) zjy2YiG@2_bBn0x9Ii(A;n-Dh@KMNQ^3~zhiR@~ifN&r5904(Lwc;V|}(}v43`@yR& zn|@qux3=s4SNAm8%Z~#4ay0#3Dln-Xh}lbYP_~7E68ZVlQ4sb{*$wR}5Z`G~#NT@J zN-BVkZlKY^0jJ6QI2{zhWDQ%pw4&Rsg$i(KQ!Et ziVZl#XPEXKa0hdnnD9Zzew+@$4BqHx0f6Bsm$ z{J`G9=##te_$x;*Q)vihZZJq4U5Y4t-azd5Dc_zRV3)(`=fBTuqx0?Lr|n09u*(73 zZ{+jR?gT{}btM+9T;766uDR+td^SEH{Wp+bpQjPLq9_mSi?1=7+O=vUE7w0mUFOZX^R+Zixs(cidf|8eK$h; z%wBw$Z~h!Vbg{0^DeA8^;TXymI>!NMe>!F&VTDe+-Mr(fEne}huU>U)$Sz8pKSi9e z^}xDDx1AGRTT*7K4LnGy^5V9Aa0%jnp*Q*f#J%dA!W=bjPG}vgnwjrb3H46fm6j_ye zKX6#VeH&BSNPlojAly)jFeT!CK^_eqt^$F~c)Fu)a!FPKcar1is?+1)oy$$u;{Orm z+hp70-Juh+lz1J0!SsFXw4ym!%Uw@y98CiLDWj?&_7;OKiZagLEuBOh93_BTUlD~c zOi;tN!d#Uh_dCk$hREu1NL&Ws0}m4@&sM{Bu~_1bqf_$563T_%Aq+Ycg}!jrSB}QI zuJOfQQ>+Th1>gw(HL5@uO~82q^uZcmQ$YG4hd)~fs-(Zz^t!mA6IGSL=8!Iv0p;#j zhe*{#scZD`F4H{aRmYD#_ zW*dag&R-Kv9Kk;DkGo#)MbIB{)SC-!0#i^T@d%qF&6|ez*lNSae>%l6ybqQ|#D| zcstyk95=iV!GR5yH$StT40e|`t-%nwY~wHCL)2n6W}j@?AqTHcb&u(ta$SZLkfw0L ze$%F0=Uvz2@6N#ShC{ht($t(P+Aq{3?^#Oc@dkl%%ZojwFY(6)`R1nO)f$@BrtL^U zBRTEV4^`@VDN_TqgM+-LwHJ09257x#wrpks*P1qFEiy6YlCU-^P;7X)`Mr&8y{Ro* z^4u;JVGI>lpVeOlR~Lth3zo?G5i^XEyYBno0cxu-Kfxw;gJ#?VLTJ1m4T5afM+93+ z5VSfVY}<8mdfv|?<$H?VuuqXvi5M0f;MrE6jztbDh+tFw9c=Xe$)>=&=pLY;JWIl21k5qvsE6zhMJrNq) zIxd0>(W?P|&+yK?!*dLwpbkFTMLYN9&X5`DN`;M;j{fX2gdH`2g|ySOhLdu&nlplF zUA;a#gKDgE<1Z7yxv;xBC$UI6MADbj6vNUD|D_o`iujA=OfZ`Z#DMD0OROt$)1Q|W zI|4FBK5}UzZw1+T3WB1pv$DuJ@m#fs-kf4LLUeL~*ON`gzMRc({%Q48^tFKR&1MGJ z&$zExZZpMgxLBctjx^44c10fNq5u}U-A}7WH6?%g3Gy#0vcxBqm5oIsZxvX~GiRPF z2!Gxe$KK#8JmQL-yd9c3PC4jo&&NkW1gk!Nu-X)20Ejyo>KEa2~Uv74N~m0Ihk<5JUVz-@v%B15sxrcmIn4hwD&&K_G{l<#RF}{& zd%1vA{W>0a5(mL?cAv~TpBNyZq<)=exzcS|`jkLI!t=a8gU8Yy`E`b3H_3UFb#heo z25J++Znwn{6E$oE1_mVQZ)Vx!l9-BZ# zWdG9+IqG>iZ0KFK;8qYR$^{DIue0`Z4;;@{$-V;}9cn)*F)8Sdf1?A0Y>B9ocQZ%?S1WY{C4T*dlZ7N! z4(Vu)po$`yI24B@DkNM7xNAtikMk>11?Cv&W$)t86%6AoT$L|4emuHMMl7XIS!Qv4 zd@Z+LVWGS9x+ymVGt+9R9%XWwOdKr$uLSvQ;V1w^_yjPldXyg_Y8S$k<8sjNui)ii ziO^0dvx?7imSd#qiJz8nI%=`oDASZ92IHLc%UEQQHuVfk=w$8z&Z0qgx8(Wct}Xiz zs$LtQWV2xUCV%}>uTuVrdMVQ-iD;`w_c!DRk=jgCwz-&4M~T5o?aStW_cQfWEz~I| zH}ZrryrWFC(kq?StE*g>bV~x5Tb$R*BSIG@NkG+~h%KhWO&H~>q&QKn2%yWIJna&y z{nWiyMZKKt7$eL9?wOM+cNwqEUq@%WTb(@6f@Kt>yy@VS&I^xP z{Rfyuh2M?5bVJQ8b46;S#P1y%-AepQJag^^?{KPVEVS8)aArH<`mY5%1H$~++-Uo9 z%GVr2ZD>0zM)VUNBovIB+M)DGxL0Uc1LT9qR%0n)`YRs*#gy>D1A^jdZ&iN-w;r&d9Qn!(4_S8lBVE-he|-xLGBz_H-QM(Bx#7 zw(Tjs#qDYAK%Y{3ZE&Nhs#j3H zLy}3{O$8Z)ww1ciigr&_t3b)olKoK_M;ZVn^|rQ6n*iQaM-{+!NEPhGNKN1y0&Ti% zO!%wmkHOvT+!>)PBkBan&4!^Y?GQMfzI>z@U6+nDM9B6IOT*@p2b+bk0lh*u#i8@gNTwcV+gGS+=BHwJ4Nq(%fT-Q&SrY9vQr5PaXV1pLN(Ro`+y( zt7l0qHeT}VnDoTz2P}>;EKL?({H%bc1{pOM^t^m63N5Q1&eN-qTVXpv&_Tz&G z3!%VK5WJKP>ip=V3a+aKkO&kf!LTqT#bNyK1yZ|~Wu;%05F2@Dv6eHSYEBE1Mg9g) zHVISTiHGqa@v42OLMAn2&mezb^qECzJ1gJd!@xahbkFwat+|%e;v*E!LlMQy{m2F$i850| zg|QoGo!zO4@zlE!wSDr3z=WBMMI0=pgzB9AaQgFoB|oU+EwbAQ*h}C_l75a#xi|7B zrXh4^qA$XWsx)zOORqJzBn<}C+`%g#NHF`GB0TH<=58COcDI$Sum9Ah$+B^+v*09Q zk>5DW z9cUVgoScq11@W+Ac%jmrl#POSjZnMGB@)*hNbZCsZyn#_utSpylAKt0CA7Pi2=>}- z?wELI!0vV=^t*b*4YJT8)N*$ip&Mor;(JNh@Q}34S{uJNU-kmvWlq#BjtaTWAkRg% zl;+z{3$iRw+6+*RC3DfuqLbz`$b0XV_aO1DZA9$KGevHhrIG^QraYzAnnO4{k1WUb z#5ggkjF(n{Hpvc<@& z@5Cu`cAdpC2a=LIt4PYOuokW6VnzAG3rz^hph%k}xbqRTW|19YTjSJzk)mk2sW&W2~XGRnfP_ z?p)=NV(9s*WWyAZ6 za6}M#ZgUCX)Q{emV>3%}tq(1@1rd2i^L0Wl)O!fPGf_DuOKFwI=Ilz<846Y?K_g&| zUWOF!$g!m#lS3;TA6&V>(MI6Ayv~sSI8&-AM*`^Nh9?*b0IZzx&mV>^h@pAitYuema~A5T&<|8+C4{Gb(!IU4KePXx zKe&kryHveynVU}raT-*OIaX_&Yb?H8utD*YeoglMgbw3n7zR;!LYtgUIb#U{S%HPC z%xJMEFB-k)eqx!p?KOy%USo&+jh5UU znk~G@VQUxz)Ka=TXXcc`aF%vXohzWQ5yADhx_T>IXM4ZA#=D!jB7P8N+Uk>|3+?OK z;^MrukvaK`qe!;l{R1nv$Me<4=IZEoc4i%&)vELWnCpzt(Wl^_>?8W8`SCMdzneG+6+4*x7I;hj%WL&y=3O9t%Pe?GWDk+of^io?P8#` zDJ$kes^hhdv3VyAo2|vc>eY|QO%zR&Na%ZuPifGvi_TZo;qndE9w2F%hVsC9rsEhA zpT8qT>uG;zr7mApokTfbfY;sG-NA}=?qp;aEg|&Y%iH7r_Xq#~7@ZDX@it#9AfW60 z|8wWLr9xA^=|9Ta$Vi=o^B=XHovF_DA78$lr!FS?4z)gb%ps6j7BZ=*^t*>~;EauX45Cv}PS};l` zW#A^(aIcV3lgsYPer9VXfb{LtV~LXpVYG%1)^F2sQGKsFEO1u z;G-R+s?X~3+_yck<&)F(tg8%oa+6tK?bz;_j=wg1vK^wtaI!qkoQ^iF)1>?B1m;`; z5Z#8WsP=KwRWqsGDf%_Wd`8;B)n3|p$XI6X@0QGI*4B4j+Kw=z*LQlO+TgZI&&82W zn|JfkGb zK1Ov@klP@u%jm*9*#HI4H_*bJZLRnSJ2Nkj6_{)IRjLa*c%-0CF ztA}bg^Alv-fU%^3A3lIhj1A<-1%6Hgg$N8-4?4rz8J`6TqVFzIbxfzBtaobP<(>=K zl@PgFTwwtU##EFs9rmwuipuyw3*t~kYDw&h5)Ps7W6(9-Ya`+6ga@3pHKJ z$n*Q=ivlReF?3^)NKbK6Y3U^*%w$YRg+&tMXS0E`6j>P)d&0fvY$hw-(*}E~mp2b+ z4!SDb=D9;`NHT3ffdCZu7;`Zj;M9O{JQ8CK%f#=jR3=eVfjrVk=BAPi)8FN>J zZl{?%<@?WYbT9GLZugDfF zx`l>Chni01sPL_sbu^VDQ_QEgA)-`ONr_{lj}D%f=hTE<2zX^@-9(#FF*9(^Yw!b^ z56c33P1nNnC_47dZ|$s!fRIRN-Ye?rO=&@g4*&cnaFenHgDh|qQgGA62r)DK{NBI% zX2{|U>_mE>`Q%h*{ZWwPzx0I8J6qg>+V&O|hVLGw|Z~QDRg>(WALY@YbB4^8GLU>4>cO6dNDXlWIQXa3@-ha0ZMn)G&wB zrevX3#4KnISL9rCz*NFLBzre)8+E4O-rrf9rsqX*XZb$jrVs_5kmcvE&oA3HN2YJT ztk>K9l7Y~-vN7M^rJKrXOz+bUd7Mk#bdGFjXOeP8SvR?9yWwFXcy1#qznJ7(6hOib zKG5`aTlxz9eAc}81j5K)na%2(s#mJp<0;G(RyZzaixq~l0K2HeiG!#3jZ0&k==qP@ ztry^Z+uoq{*0E`MBUq%z?KgdBqc#nsDXL}V5W`DThYL z3+5z~ai`AzutM}vrdJtjza6XE5`OEVWkiR2`YsZ`_jPI~?7uyJ0!NFOH8L@vGtad| zXljo;%lU1Q01SsAhkxgNIC@=j#~piZ8oXL%pix4x^r16h|11Ydl7f!T)_CvD!a&7U zHs^S%9Wd^ay{na_A!rS1?GLt6e`GM}FV`vr9W(!&oQ|9)9i$jc4SD%uNmOJLS>Pk{ zYFtSZhGBxCwJGc~4nxr*r+huQ&qA(zPH_oh6yk3x2IR?i4^F}=w)awgh;^A}YlX$l z@7#M^l_PT0lHQBS~)j8R1`DRO2&M)%I* zC)lu&vLaA*;{^eA7-2+*nXGkxj5MdlVU97diNSw~tGVW%EJTRjo3+sim7O!5n_Fy$S3c4y z0F*?7g($?*k)zhc%BrR`cODp#Js@ZhG%gaX-i!t6``7J00_+qClN4Dro*d0*8G=x&;iS)Kc)$iU;AV#35@u+GI+kwr zh&_)`QxrHm4rzsL5Hn%mf{2dA2qubP0rcT5$ZZ{*dRuW_u`{^n%R_w*ov`E&7vukO zmI#$jO#FCbx8udw>_7;!=kzz>D;91=$>AZ9#VNCxSmogYtjA?gdNNtbL=HQ4*nV;I zZZ+IKE%>1^ufEvz7LdT08IwK2fVIj^rGo-MDBnV-(a6qtAPDTWQ-=;L#!pXYvjWlE zOUS5*lz`Ktr>|RI{;lKf?kYrHo{lue%rv7R0)7`Y7xo{3XZni+n~aPs-`$f2x}$GH z@2QdZ1bTv)n9<{eZPVvx!27=g%~6KJ1UD2A&@0~mInbnV`)aVKYy7mi?q8Pfz>0j_41{CzbfcTe#2_y^yjJ z-%kY;R00#!?)`P#$3YPcISpS;riklmS5Fvu*tgr~f;v8as!=XK_Pj?C_uAJm{k_27 zl@(cS?0Qq_=8h;6ZdmU70XXiHRq2FT+~(wZ`MfcRB@2>)c|7OH-Vl+b`;wH0zT1<< z7F&*koeuD)$i&UTCBVzU%gQY4Vf%haz?R22Lkr61=j7w__|Ue;NzGYl#CNm+|EmXp z^Cy-vxM-zp%t3PlKZykVs;uG5*h96d%rX`&Es8xv`?a){*)ef zl^z#-f5d0hmioD?!S=e<3)Z$W8^cu%_H=-hGC$5c<`_gGDU06>mQzl2??&=zq#AD$Tc zJsw6mLgyi=De;);f&jNX=e}mv{ld2mK5?+n_vl^`a^OY2DnjdFEabE$;u@5bY-UU} zPL?#sKv!mV{xq~p#UBHe#V3J7jI5>_X+QXtSivy{z78H!CCrD$zi)Y*2D2CS9B2?^ zkQBE5#wc#o0FY>9?1LG8PB;a8=8_i}Q$g+$8}Pjn;*uNi_xU9hIe!2dJk0zJ{XzgK zAe7Rhpz>f(5iJ2A%5{%jwY}+o8~kPLxqk3ef@1V~F8uXDP(HWzbRv7zjwPy4bSr>d zHNe~))A!fuRuzj`w>4!1;_%XN>(TD_{5)MvBgvw`1so<+b<9RlX7xx*Y~^>pT$@`r z5_~#h8RLjf8@2Inz@ui`g2Tw23kb4FzA(9IEziekhXRr!$%C|?V&*$z3v3f_PMaI= zds>G(6#&!`)ntKzcK(dKk0UZVXj9o)A99%*$I97o_=wrOgx8axYdi>0qwNppoy=q1 z1NNd-0I=CQrK!FsRFSLgmC#Yp3zryxr}N*twHQrzx3lJ%ra}0U>ayOrXlIq{i^%n^ z#(Hx+If*$B?}XzfLpiGS^~@FknmL&&>YP@L$Fx860Uzg9;K3gj&qDkOZzZApmh?}; z{ue%-7@O*RUwxnN)-b*?i3r9 z5Ha>?+Eu5~(9Kye5O-d>q-m!Z5R|={c~pji-z2APJ*!H%Fitg0f8U}JGEWI-o<(vy z16aL*P^N@Qx)pl^^A}P06wj1J<7!{LI#__sUu4bBGy%6T`OC7WcsJ87%I>sDD6b zXz{tXm9aL*VFr-JZyzr1q23FO$}z5Q+;%iC#Ve-2i;^uSI3b0K_$rT!hvfYxHJ+2Q zt=0Vfp0+C-4-`BhOu&86Lm>z)=07EH4LEK5!zX#eXfY6clK@;hgh|=xm=$w2k-Cvs z&xt|hhVV3gd3m|^8Mb{5&}ZPKe^4B4q*|&c=z$kK%E~Z9!b1aDIIA1 zpo3i7Et!TA)#=G?qakWD`P=>!gP(7IL!|{oXT}9I>lozF%UUILR+w|Qs};#f z`t_TZHDqM*r*vZ2QSS{N9&ZsD*N`A z3}F;A{7T){O>brPEsF{{)9F^zBivxNAYb{M@v#yhvgOm}86OfY66X|SX91a`uRNX3=HiYOn)!BmFIRFz3( z1E@(E1e2Q~{|LmqOzdyE_3{(pn@kmNT`AzsZC9PA&6;;v>X}!KPV?rIvCKMubHw>* z4O~NRQidKPJQ%A%ptiQ{oz>U27o%}8CD+bg?0v5qtm1GAzcOl59U#_80o_VV3Q&npCYucP-m z`p3}GD>lGhQQu`n{c)NU!S}toz60voDQX2!g<3iVTv?jj#CPlzy;gkp%6hM?e?(=y zunqPq`%bECiu5p?@AdT^(APQzEYSoAr_zbeR=P?jN`c);o$Zm|y~5sqE9@UiVSDz# zUR&Q;ZG9Py_K{$BKv!pyfN2!vIc?M^xz;7XbnZYRsM4U#%Dl5`drpw|N_(%ge>kN* zw*&Sn`);Z1HwM{hozG=H$RhpzUUUE7*WBimT~*#iF2dOw-z|;3L5}x|d#|{E48^@+ zBkc9}oz>q|({!)6?~3Ao9tOEcQeB<@&T8s8iQTK{y^8+fRP@{q*z4xItDEzfjz)6uic8#{qz#JZ;N=KEIe7VjcquvSKDJ8c7RF%I5~DYssgA)U0%- z5_#iT>+{J2wRTJL<@{E6lJgkySpn)>0^1a5Yv794*iky0i)R0Dar16AzC0{p z^(~F@Ww;`gaq+csRtWVA46ITavfM z9C4Tf8YJ)yMP}Or{`28efR(fxS(K89nEF5$1bSt%m}JTPk^)P(3tOMrycZWq z*vix*ezEzvRgw$NY@1!m+Hq|`2PepiU+rI}+U<4Gt|dc$7j}HB2PdTIk0W1V!6HCy z;KVP(O&SB)oio3e5iS7R9Ki~tDVZ&NMgr|Ux|OSOxPT`ctZV-~VCCeO&TwRIm;$AJ`48x_t2N z1KObhi^qeRHeCb{PiwmfbZ?Wri=cfMK^tug&SemP=i*yb40RtolaESu8pEIn*yR7z zoeE5gplt`%Y(1uCMFZ$c#jacqs*T9ZdgcaBfryXBP6NvqP?x?v<KXCJ77xRv>f$xofIw4qVEx)VbNZjpN0Frs_|m~Cwu)FRR&^B{;Q1ChqkD*d z@KC1BhG(a}+TOYMrdRUbJ;!y=MWb<=6@sRzOP7w_*Qv7CH+qZx{kfY_HudAWM2G51 zz0|)JG6VYVw#tZ>tuo7p&rPexU&+82Q6nw^LxlL z;TG`BGM#mEu2};@NY~8v;#}Ks%wbu7l}rbmPBYXqmX{}RcQ{W)6sm7U*Hc}Y%52a; z*<9-AyuO}fJFYt<$&!aT)g(*ojL-DC8G^>};M3xU6haieA1kxK9g#H`UHw+4e;_u8`}?c~z(H3sBoc+QES8S2KU8==wFI5}*M>0f%FBI9;4{2=qv`hB^N2oKKK1_j_U+iX>M$RMGK zPGgWv8#B#lkI-CX5Dq9IOV#HoRVcRK;q!(BH1er5i(AZefYrGfdFea_2aE+S+MVQh z=pVd!^G1ZBn5vfoJdhc{v9{TN)bo&O8q{NkM}#_M_+nNgSkcc7hGmv;Ci6*L>Ye_9 zt?Y!OF$jvmP;~r%M{|K~JS;p? zZ@y_>$Wb>{M&4L$!y={?`|0Athj$--vcbSQ47lGbesku9U^qpZE#CJQr=l^j?yljH18JQ3qksZ&)W8XBdVG1&^f=oRjG)# zkZ;HGX<+Hr%b};4jDsS&m3j>Y*&5J9)b-&#Z3GZ*+l7f;NHP7Gb9Fw+H|$`+#P8;_ zjif|a?;h=h+<=FFe$Ifq8$J>KrA-+WURt6#}zvIxuO}iKKr*Qjz#L`#a$H!rS}!l zWK2Jy;goM^pYl=5>ayE33TK0+DpI*37j(+=v4+ z-Tm4+?TmVf^@#~gl4~2}v_ZVyQ|!X)46_M0S|j@88&M|=bwnUOp_{BT z%!ovdH4g)rwYYJ5YFcO>hA@ofUx1ypUTep<5w@IvEqvB`wy>WJ6ua{}4Z?h8g-|uA z2A0_wWF_)%eXtZ^d*%CF#8tD5PaUxffr=b(Dd5#s75UX?))#_Bk1#CSVCYqCiiNM5 zuOWx*N4vBHA2qWCE7x%92(V-bRz61Uz(-B(z$%MrN4OO@Cq}E!759ks zF1f;gt+j~ARRcpYYGANE0wZd+V6Z*LY{wlLY>zQ>vOR`&vv|z9zqx(yG&ieJ0MntkFb1$`Y{h6`Ok;%RNO@*>Cg*(6ABqYPa1_B z&fhHX*YHXEp@*K(qCYP5@Jap9LsIPfxWlY}Vcg+InMFYy{evP0HZ|>dy6nGdakDq> zj)1g(VB)ZA|8SjVbqO-9-5z zdVDOVNSSJRcc?7^kg79ZS&+(;ZQ52#p$W6h($Tg<4h^dSg1`r4nu7T@C?%vE zdNe8$pwT24QOl}xJVW*q8h&Wb?4;4kvX?=e1L_S7Nz@GJy<*8@D34}Qo4$^Jv#nBg z>ug|L0WpZ1IxTpJv}(b5o)1}Y>>Z7yC*K!ug6wPVEW#icp%Py{>D^!!5MWphE*q(# zKG*xRMoSY<@J|C!numoVn;?biFj(?B#Q!Uuh+%Lm^_(d4pO~Bzff`MIJxwyfY7jmS z`~5;+W!Q?Z$*s(a%hafs&b^I)%z1oJ?RSM~99hVJ{uZj-cs3dm5V#B_bjbq22@>fC zzzGn|w+tt5(*j4722HVBF*LyVK0c&4QGj3t4E@^;tN@XJd{|*d_wk> z%_`-y7P01}O`fg59XJX}DPCzN!YCid!IaM%1bKWi*g>?s7A$?1nH*<-GFRUUs{Mwb z!!Z;U$cI}X@Nd3y)zWs|2)WBlAYp-`yq4`Be4e4ljV$Qk+qu^r41?@>(K)`S>*jn> zU*QJ~aZ`ECKR=f&bt+mx&CI{64}Mi2==Popbq#0gKR##NGOUg>H%a6->fCd)*6270 zL>6uWTaSpeYQuS+4>Uc0S}Xu>=ag@9fFXX>umsGh0>tg{^&}8>$EVRavLvc`25m2> zZa%66yK?~|=J*T9jEZBMl0cB#(%v(m5A;L@quQ#AM;<-B0XGJR`snYXD={-vA_GkpsYz?P}2fN?P*%?z@WlodaDv1I%6Ps^9?TkL|0_M%6HT*k92V)Z|nklM85K8^Q2L zBnmNujQG>hx?{JE{tM0nQ-(g2Vy)Yx1ZqiSD6bWPQ15F#Kae|wPo_!D@=BQoQv_E_ ze^_mR8&lP0gKW2dcAISA@!>L$NM0mRYzXfE=hl836&b+R48|s|ZhA210f;;TS|I$n z>XV@uf<+Ro#E?YD(YTmm_yL6#0hG#1F+JDSsq8K9sR+!qpby zA6u#z=4s6Ra;Yiz)pTPY?zSq6E%z{g8D+U?Hcj$j8<9~7sXV$#h>_gW+B}=AZKl;m ziL!ZaujEaXyh=j(UHn2nCT8~N_l4f;)%Y=W26veOm2aq1ql~Zl{9_hiG0f6$xmfK3 z;4{*?nb%f-{j>Sl28Tep6hv8Ia@OR0u?;$P$(pV6J+X1-0DTBXKoM(&VZbTGSL!=A zGBZt9)GwWKWZisnm7Dv;%5adHO;|8gbS*k_%*yg2?PK&0ayW z14FH??L@X}c{}|B9V?yaw<*^oo#=upSCn?0ABu5*EQ4I?QX0Wc5G7EbIk1u&&`=ml z`OcM%OUdzen?UP?-PjFia{C9Qsr%|}Hq{1YHr(Yn#fdvfJyJs2tp;EMYmL{`xKf9Y zuRANdW~bhmNyy}bVOe!1zYJFcioxL(*ueP*tE$=g*LJCd=D!Iv>KF&2Y?ffvdLRpc zSH(bo7hqRqc7f;iFAi2nsEp!PfrbDM-{vp-#%49M{Ul~>z#RFoZR#c%tT zlepGK_>*CQ?_mNWo2vGD5QdlOdFt$RH+00_0863~c_UaApOfaPWCpk|#qek50PCuW z(F`CpyfDLSeQ>nmM}{^={uyNQf(6i4MMHmozWnl8d@*ICnyeINoO!vr9Lh}1l=?4G z$BdG*yqlW?5QQ?9y?#mv+ccT}HQt3U6A0Sk(`enF>8}k1`7^EVajEZZ=pUq788BSP zH`%KGL28XvGMDX)pSvGIxcdKYviSm{Aep7h9Mql9Nq7_T45zs|eF7bxEem-O zWQ9^8^#4YR^eI-H+;Ab2P+ZVmStAaAS}#!UCj%EKcdGn?M0}+l*DFG7l<%n7q2D(L zAuUH>J;mI97qd-R(dvfp8N(G$9gCavtA|6dTzM5a>k3)9TICzHgVdp4Rs-af`?M9Ui2g@}Zrt^Plp-8wmJ@3Pl2RAiw6hzE&uID=e5k z9H_?c9YaTXV60HoQAO#Snp-Ax#oVlfz-W<^Jd!d1CwFRvSGhSdqb8_EatMyM;k>l7 z-w3XI$L;zrOH|`mbMSK4G~}|I$x(VMQ6<|u#?J45{Hd=8RN3XLfZo=#W0>hNSeNG> zGyTQ1c}~X^&}SPs7cyJSs!|w#nI`en)xfX|tHZ46i(lnbM+#EW<|s`N7-gox5ZeF| zpar(o7jB4`mEq1>YF_CuLiJ6lLm|t_qlDVEfvYR{1R7$yN*JG)v)@<@-FIz#0tHsrAAtrl($pGO->_LymZIK*;=F{@-= zU26u!k!AfStq05U5Zxkuoqm(qiy+rkN^B}-$4>S9#~ZZeic#>ZmQ;I_n86@)xfs1x z(X61+UbfB(0=r4q>0$XgmA1?}{CbjQJxx!uW;Zc*qL30NJ+Sz% zCE4|GHM7nUkONYM0K1l%DFhIJBaHM()WtATFnwe~{DEUBlI$ZEN}%XdmSU%4*g#fv z7cFCZ%mg2R0DMnQi#R(3BI}49lb6@gcp{NC+(qP0kC{f(W{WF-MZ11EoAf;W(Ms9) zv#VH-M>;_<0nBxRQf5IY2Qm3#0&(eraM{$Ezy-90;(^wD%@Ya%mEYAzq3sa`)W~Yz z0q-fn2i-%jZ2;n;U)ii|p&PcZp-qzu=jPo%fKFIYM`Gg5WK+<^?gXJXsRahU?793_oax5(LrI@IXFro&f==NHei2r} zF8z`GZSZhG<)LV48!*DdxAm1kUzl9}2HfxvuogETr%4ffZ@?21EH@WRy^KapM2C4~ zSi#SmD9@EmPyC$EO3O51iwA?7*`jk*6Mi7vT*r@oa1)OHT$M7R_&j#I@4u=o7%SVA zDnXHVRc66|04fi}Er^N4s5R*P{V77c#aj;B1WH;i7PJjzK^J*;`KXE(FtI=p%d!!* zF(O1hsKy-FcRMz?D@u@ReOo?U0?l-nstFI%Z$dpF`UgcQP#sle^+F2(bOJZhol_f~ z0ky*p%JOb>y7~XVe7Jc2A8t)L{evU+YkkWV|2VLJNPBuwKwk}(fcQS<1wH@yt-F5P zYp*NbXZmvgCX>3mF1gY$nEpG)*DfyU zw|z%{4_whBpoUeqd>+SCqLDDn02=uyO&EA&%^-eMEL7i;AIF6> z`fjo(ffADQ-HLRYnjY*&sZMxl0--oqDY9(@1#3OFs!YH#kaGottudJox{3T=yp9qb zs+&b4s3>A`W7TJ2~K7km+OYWM8bVc{I zOm2$d5?|(Rh$+0_E|qb&>(`b4Gf|j-qpVJwTMJd?#9e}pouxUFSmAiEE@t($R6yQ; zi%EvMV)W#3Z1e6;9+#V9G*Mucq||gkT&HxBRchvHDuQHM43(hnvbLss@vTd+Y-V*? z%X|nM&2PltZh~WIfibk60}J1wOY4^?H~pTV^#R)-m+K=W>3*Q(ACBejb*-#_3zIzK z0IK(I?&pD6T*ROCr$7G;)hEO;zWUMu+%D~}+Fh+IXCCQ7=D;fASieEWB7OhSHKh(L z@2%8@09!XV0|%t^XETC0vfHiYRePol!aY7a&Cr-$|N56$V#oDm02pe9)~gtDjS3*c z0Ic`vUS7k%X%EOe0Be9&Uo-Q6V0B>1LVp>$DL2Ldu3f+~p`I<^)yZI=9Wwb14Bp2FDK^Sq8^_L4XZmsbbx@&nW+1y;v@@dvI>b5j{z zoo2Wi%Ijbf7i(9g%_^h35&J1OLsFoeB@T@1%x!A%0~(V+70>F+YfKKB7?aG3pWZ#{ zGbVk(;AByj-I1z|NZYV2k~|p#A-LLN})KxYQ&cnwN`FIxMf;vL*880*OJJ8>6qSDKn^Ge(NxHq zDTy+0F)OEJQOx_1`AT*bLuir%Kbj(U~9)KN`U;l8Wf%?P3<| zJ>#s&X%|UT^l?_1GVf7WPbzZG1ri(=cc7=6Z`S@S0*ntmY8GGagMitoInyg7xwauE2$3-0_b4GO#Gy# zTl9|>KwnzUUtN<(%6L_JdN6cCs+&Si(@Cb2oHzFST)}ShTifN_nd3_C49#hsWEnqu zU{2`L)?S`josH7FS4~No7ew8|<{mdcWyLU>XD9)9*dU!$Q>>AXwSsVS6MbXH)OC9S z+X@YT@=4JJ!j-`~i|A?!hcz|K9&Iy`wbwA+lV03RR+_mTB(nAzCYAy&nub}U-tG8G z4AZgH#l&RtTRIh^sZa;X+h`!W;&K=yU-f4+jW=l;8nFast6^Sg+tqY>4f9Qx>m}%- z7YHLbz{AP5y@vUrtF~lyGrmnlJ{b(lO(?&AD^Sl5#WeF0}cY*b6Y>+wX-S|IUeE9J0!%xO)f9Y4OM-$@fZ zW=3bLP4J#9HPR?#UU(a6m?|}w>f=9SLycv@`7<`uNVA*nZ<8caQ#ct%>X_0E#!;7l z=9E9a_Ugd<>mMQGvvr>R!+f4A`7s6Y1O4NLws(O#L#>V6`*+@h#0_wegZ@ zpj#!4q%4ffJB~4_YGg`o0l>ik-K_vP7?itR00)C@R{^*dD@=4+08j_un`_~C{7Kj) z&1wMO&JF{DZuz*)44maZpAV;h7;XbWu8X*R3gLFMP97$rwJ?NMN4xfC4$Oy`Ftu>V zp5v9|{-Yd=Tl!Ix@aBav!Bd@Z5$t3w8$C=F47lNYNM2VPNia!5iZs7U{pU=O1{`HG+JKML1 z552?L&7B<(7{mxUDqEp#7>DA zH>Qt=W+gNEy|VbDAZWEaXC4iyKy;r#O8$uVTPA+mg?qF@x+0u4Y10)QhvqA`PRAic?qr@5NeSpV7w zjFTrT4;a}bp+CDaj51{}rpkPeu7$Fr!&K&pNe3-V3L2XW?+#tyLJ_0~sCGk=DbsgC!KC<5Z+jI`S>e?rj>1eFBrasXQ(oj-BO{#w*;kZuYP(6)H zoN3C_&Cx)Jqrq6qVV({8{ShTy_UV&;UmX3ao?bjls1V^%ScA z7pCpiOQEw8Utj$F;bKD~NOl z4(gzm=HR=+rw3PStkRVv>Oj)!-kU2QTL*GTvXfNEEK4&%r5p~;&#|%>!RSz2OBuR|yxhQG>D&{fcXeKTCXLq7f7e2$-RbqP%g;5> z_@GUHsrETtl#$6$?qq$@OZmsHmdk7awy;AD9(n%Prt9TDsH{L(S5;?z-sShPS`f8( z=50O;bj)+`1Sq8i_44idW*fz3_LOuJ8umx#t{%On>YefA8LiWIm&;D67r=! zquZ&OZCKk3ol6ehC8?^xyLGx>{@?!sP)i3I2m)Q&eyS`004VnX08mQ<1QY-W2nYaD z3L}?@q*ye6OK%%F636fJDH=Lk8Ir}~!#8gRI|wk|493m?i`_XC$)c?tJq&d_h!Oa^ zPqpkg?pTpp8UuSU+G0~;|LR}Q{yd@E?s~QUiDvV=x2t8ho~7GvwpzC5bTc{qJV~?p ze8y>Y=O?HC`8+Aq@#J)3l!2)VQv;KeNnR}$v+g&4Zg1yZyV-S3?X~QxxoQPEIK{DM zpTK1gs+i14vjsp`vgZ`#H)icQudn#+=BFm7mF6vbj6pmZr-2TaobIvR{yao zcd{r89bNV3KHUG~WKw5yzP!8P_H0?6Gd&{xk3Ld=oh@5lZ&)X%`eagg&R;&=-{1dn zfASK4*Y3g*duA8AJD)sa1x;lI!Z3ERf|xJ z1q|k3Vvejsal|@nP>12*ejFTu(|zh*&h%EIh=p0id#>6QlZ&CpCuR!w( zXNsCj z1M>JCU;V~YWmlpXKQ*r6gWhFBl9=Xyn3EU~y$6YIv0}EFJQr0Z4NJMVrHl^sw5Dag zo<6vXe?*ZZB!3H#|dc(bmFcvi>U;4Z}dNg@|1iRRPozwcy zA3rP?a%rZ`1<6ttzAF}MwCydw5~CfK7z+bJl?)mg_+zZTa0DZ>76wl__no35=4`z* z#iRZ7xms)9NLXI0xf(|BH(F)iDKeXjP*0P`*kLm7q;8QDwDquz+V{18$$4EV$xt8UffaiKl{jNeCaEA7=SFAL$1-p>{gv{cvi@4B zLd-bq@tR`29olr*4wP(|xkF?{qZUaYk8?fu;OQeD(N;gHQg@=vT48YZ= z94+>m6v`sd-wBa_pZCb|H9#JXGph5Ke(CY$^*P*VkXtOz`lKNF;UCPmB4c zYwL}n9tTCaK6-oq@5b(U|8&~(Q+}uQOi=mTqZ|YcZ-U3CZ~ZiDZ{~FOFIw=HN1MF8 zFj~Ro^ipO{+gx0p{qp9`hx4=FCinM0`~^@;2M8AFQxfeI1pok~7XScIO9KQH00;;O z08$Dgmk_F0H-Bw&+cviTet!kxPG{uSrbRn`-4A=Sb-H!8ZZb`JcV}XcLyNG@nj*C% zWyf3hzh4~iMWh5-!~;<4q~dNJNtS^F;NalkygcW_?`tD3yIDJ0`{nhkPXMZ=bc=`L$HUJ~~?4 z?r-mG_76Av+oGjr&)ce=H=7;KZM47H-`(8aooRHZMWgR;f|QB>doyETS8*afzD_ug zM1P^ret-1ts;@chBs&}T``h~|i@YKCnRk`(gk?88|K89`2XV$OXnrmn_V?h9N9>Y^ z@jder&Vne-lJOu5;wWWt#BRjrS7#HiSb z_>Ewg-?V$%>tYD|EgF5B@Pz++9Hc?U(u!kQ_{0U}cxZKKaffl5v4juA z-?BTNq+$W}m+PR5u^zT))OFaK5udCQ>jhWrAs$Pfj0C@m6{Jz#^KcLkIZFq`{u^u% z27_Dn@p~agJ~HC_9nL;}7si5J-{u?QBTdjienJiKPeCfVqTE(jL6T5)DOO0hUa0%J^2@m)SmM9jzeTrsz!Hc~L} z=p7HGtf~#z4+K|caq_UiyvQ$C?9D$ALfS~qoRE_%B0?|^F_0HMu&Z%G9}ro?QI-l~ z1_M6IN%i@aHx9E@f5W(K1RO0uEM)cdIDg@dsVM~OH{axY`le{ra>KKG49E7<}BoQJQP!qpJ|0u`}j`GOtCy4Sv<;~6l-%SR?6^s3dD}XUKMAimu;{x z9+141)TGH^Ybd69>o;+fZdH1QLvKGaQf4+-5?tS8n>m{YS;6!-F$tiLzl@`acH&S= zz4eb$)=~3=*cSrI55#7nqdygAFMmlYv7#fM_wxaFrlrtAqA;uZ7k+B<>CuMf@U}Lw_$LbkE~DtQu!txXQOd8Um(p>mfSX{ znqZ8NA3y4Ev^GbRX!{2tS7UZ1Ho1NmZ4N5Y1-lRrE1v3wc6ZxtP7u-XBY$;rb|!ne zcoc6hWdHj8wLC5!oB!KlTe5%s{#u?Iq7ON&{3pv#@d3^9mVTct4~R#a!YwhXi;Im5 z(Xn_zuP+|;du($6wB`BpvMq63WJz#2CUJM_ji~9Gw4z(dCQa}kL``w45=x=BML(SE zQ`Wp$Wlv_eShzP7S7#fKMIMq-S4~16;tu*)XoKKQU5phviE)VYJAPy z!+xLb9rgQf^?O&c%e>xSQ=j$G9|(14l#hPzX!qsY)2R>lk9KzeqLdu<6j6OmqFw?- zDbM^xM2UM#RwK$iJlGdRz1+!(I%IFe`R^Vc9u^-iCaUcQ*{$!4=6|96T|69$BYEp@ z54?COPw(cADL%2VWk%lMmb9CqufKG=LAu=l!Eh8O8GG-gw+{XINnEA$2c*T`MVC@% z`t?M=GcC5QclJ&wVPf6%d(=`jwOdzeSPRDU`V(DrNO2~uvwEjLG^Gk=ZD>mEYworh zUkU|VTqeCVWs|Ke?te+*3w~N|H}<=}6020ptc_BAX`k0TDVD`hCxh&*v)}*F?^sKa zP{;rKMqEJ?agEgPOG~WO26-0;w1#{z&UmjBF)S-yY_MNX*f`i=#pYyb{_ncDwIuO< z${PHQti6_ODmDLc;9NfNQ=X=RmfpJlzEWSP7j;_<-buYXPJgr0E2jyeKuc;-?*Id8 z$u9lowWO0Fe{0FA8h>BLamc-h@q8ESD+5}>spOP|XX7MdS6-L`2b%icXqPwCcg1;q zv}nKeO=^3wrnpiQS8C!)P5hkIMDH@q5>H$@gC=NnGE_8|M%Ri%H>G{6g1}nAlbGIqdysgx}&r0os zH8EKCLw^*_XQcKubfX%>TTqRjkp@^hTxw$k!{VP?M3=z{jp}*m3B4@!ZyY#b{q%FL zc}8TuN)qouo{Q_qk^E=V|CSubb?POztMm4=I&W8ImX(=BsY=xL@|T!m7es{1j=ZKOjhCsvgn3 zD}Mo`zV;nL;L)Z8$}Cp0d>Z_Ri+dKrWZG70(E6w?XMsMn zH?Gx<>+`>H)%Nm#)35FGbdUt#+`{RswZZph34v}gkfI|syjsuYUB+xywACHpMx!N= zmT)OExY1~956|RAqpgiJ)Gg2VX&3bBe18w{8sz-8iY%jju>+JcE$L=cDeEs*%6^T8 zD?|87EnBH&UxZrL*v%_bxE=pIgM&8KXr+x@v>3L$GXW*KkjlHd;RleRqH4mP)6n%$df$FfSQv0)C3i%41w7k513 zNw4hn$z@g!-tMkcc42Q*=FPX=luztQx`}R8wQRcHh1A<;y#b5+ZfVwmO)lNqX%Ulz zp~+=slURmLq8J)&Oect)lQ->#b$_tA<929*P&cn7AnF4XQY>`d4ZJAgiM|-O8knaT zR+~ygGspD&GtfPpSG!F6FfOKyO3NiD(MVh#3Zn*HJc?iT-aVulAByWBa6;<4e;QZx zv`$a?n+3S}YSz*|s;3MBfPqKbVj)ctU3+fy*|%-2vx0@w%*#r?T$eV z?}Uk+F!uZw+JN#%+ktF{m2J3bMR{a3oqC~}SUn|h>}{c&#pBEof+otssK+Viv0^nq zSK6^3gsbjn2|>6!)^sEF5cHFgi{n75N5w%6oB}T`szfTQ9;6bLC4Urxl#EM3G_H;s ztiHiZNGjdmPzB`Pga~MUaUlh{?p_*sGYYjLsNdkKE1eVZPuWkRFXY^LX_OUE20ILz zSUhjNL=fkU=%1b>8leo5Qsq-n;9v;qkp>b3%r2ENxt#}>iYpF zMS7PLtZeLmL_CCLr#0-Qj{SsF9oMi8^gBjeh-Jr(K-G>Nh*MqHQlj)bMtqB9$8``; zz>T3L>ZZD$s%+GC0@_UPHC+AA92ms5EBsmIm(BQ$B`#PBjOsbzfHZu^`H|dtr1BDi zlM6>;X++4)1%E1RVN0Rfc-%5wjtf;NNX5b4K!AmuJVuwiqNpf2Qzlvl#@aVGqRd4p^Grq4~dQ&=usoxf!+yeW6bI;ipI%XLS*7(%fJMk1V^tu017o!#H?>_#Z3WQNaTKcor*o34iNWAnLh;=P)9`X2!bSykz>bwKs3x zzI*ZF1v??-d3%4z(l|*THrVAjV<*gyqx|!X-A1B?`x{T(5b4K|dr``cHhWNPzrJU> zF_HTH!Ln1oFFlX7K|kGA!rMa;Y6`3MBo>nF!FDR*?Lh*ukTs2KA;q1h{|vGl!M~Re z9Dicsy(IwH>~$;9_E5mUnMIbiZA+^RiMvIsOi^#xGTV)!QTNep^2WZlNSe3I(oSz@ znfD>BZqYK62@qQ5eQkNCzs&pA(#zD%qgWI(%UqbqEiE);>sz$YIZzX})Jp)9+3)s( zx{ubbm|1FR`?Ivrke0P*p~+4PE%U(=s(*MMbgP6NSX07sGnk!qKIlXZ<3u60&`VIn z4!Tvu4y-9+m9@#zT6dz1`2~^KaxXz4JLpy+JG7>d74{rEi+$LMO6E%vp`|`tf>L(a ztx|TVuap%Tl64%3%1ft$__q}PbqMKcWLK?GLq4YAD0}EZ2Gv8@z_!@J_5Ox8ynn^< z74vc@EWy0Q86iV*B7I?Ql$vx%Py+0_1nGC!t@LyI`r>cSo@iRNJKP*@ACip~^vivm z_^F~MhLeuMfN)G1#C2{T3RS7{WovOh1+eOGaS-L?Y_L2y*crs5hc{Qh5Q=I~j$?zl z8~KQwkVn_q4OCOO->u+v`;eDH=6`w8yi6n+dwgUs^3R5p(8p6TL7RW=^&daDn}_FT z;_<&(7wZS1aQER*nE5jA`#22ads<>aTW%8(|FSrd?~AK*?UUk&KBGk^wIUDsqR^Bv zrx+FfX~YK^_Z{}P(2H(U@plkbr4ju`akSYWF=bvN=!|424JN+b{(q9>x7%NW z0C)QxOK|-nN%JIl<6_#0H{?@F6f&0`%S=wh)nljwN?0#pGYy@G&h)4FYJ6$A&WECeDH3;uJQeIJh_-+%-denq1e zi8^Mq+W<3QScc_r5Xh&z%lJ564$zbAuDsJM3E@fhDXrv70)KU?mhsB~a;oq5uF;zm zUH&4tWkF3`onvq&UDt49bCQW|+qP}nnAo^t+qP}nwvCBxC*M5x`|tbJyZTgDb$3;t z>a+JgYvH+!k_7~FeVhL>Q5c2V(pkUT9Z^^3+2`Z261kRfLx}zCRTLlDIG$sMV<%{w zP~wkFGF)6>e4ni2pEsODH$AoBGxKT2V*<+rTdob&`+( zlLV@dH0G=g*iZjaX}rdyiF0YJDTw_ujA*b_{Tr#4N{Jd{G68orZwRhq4u*&zP$V-0 zGU5QUj?jO`t-bi%CGd2xA_iFr6@u+psT2(VdqsMPo)q_D=5_@!q3PqC<$Zc^r=ldF z|M~%7B|Y~kRI8JGKr6d=Ai=rl`M<%lBXx&?A^|`gb_}j8RRpYA-mEE*p2GU^c^rVS3!V_!Dq=1UL5e22nVpjz6 zZ!_*3vS;Ex;51iw(jcmv?N+H`=ILAJQ?JzxPSN6>kRE#SRJ^;0;|O)7#QX!t0GOAg zz~d45l_5Abda-?MkX2}VIB27fMd?=tWU3q#?U+j{q-Bw(g=I0}Ukj_cXCZdBRye;rl6# zj0Ixd0+|A_B~q;%`6VPv?B<7?LAi%3X_39NeabU-JMo+ek&%o(8>z}h*3^T-$5|nt zydsZS9d6_JV#o@XSTvvb;@FlV&m{nn^b8ymy4ny0MdPDE@?$2uSU-))3L{bDBXFvU zJSNwG6i`yf-wLCn++TW7%4?6@vuw49jYXav32L4|vJYj2r8-Q;{>6yrMV^n~Xb_t$ zUuEEGoSb9M8u5jBQw=Z|MHV|6p^yJd{W1Ia2LrQD*F5vUzEp-q7yd%`y91DfCr-@i zYKV^^5rMvzZ-D=!M*9jqYx%x(uAPX}DlwxHHxflmipR~l5l)8Ui6y;#FGEH%omOtP z;rZy0b4D#36~b)~XYqTU%1>7lf*Jlsn@5U-@xDG-5 zl{>OA(lljPP**4U)8eW-zzbtuOC+z#;$?)B*o@wI^9pyc>TD z{O|3M01TXx!iD-%V>4{vi4FX?Zm z+3s!_FfP8`IFrh=y+6rz97}`Em>R-p+_QZK7M-|>i(%7MMYCJYajmT z#PAsV9^>!u*hqEmK?laLPLu0WOb)tgicDKl((u)6CDdzTV_O=($mXasqH3OTWHD8TdhSCaL~xn=xO z=b;Ln0Nf;+MGgR-c(f?unM>@FJvDytX*Mqm)bF5!`^9XbdCQ@3A5z}dnmdvIZ_2vJ z_N5a4Lhbct=x8)P%1t(UwL{!8n~!S zLS;%+1Jq;F#mtLq9K#M(p;OAiL*EwI?Cc5QHrOw~RVl!IFL-I(>kdI8fcc!~g_X7AqhUPGLsP>CRoggR48!~f~emaY6qxu4!md3!;S|U!qCcQx& zW2&XU@oxe|`f3HU=zLd;9(yBl8b_1ZAq_wtBk9IEEt7fI^`Nr#9vs)cXI4&Lem&5A zZF=7RR1kpY<#Qv`|1A#$XScL&=8u(Uf-`lK5F>uzT@8wR(MY4lK^QAoUX9bD|0s=p zD$aWPX8f2b-aJaaE=h|RXMsIsT{y0Jo&&Ek>iCybjg1EBDVtH=F)bnTicq;ca}`bF z=i@krJY1nC_u6_Cg5;kjPBkgNEMJc%A+X|`5fUIt=p9TX)zD|SyTedgpuMh zv+yE1#Wq*ZDp~voui;&ClICihpjc5b5+?JWta1E&{;h9GsG%&{Uv(Wfgr3!I$j4*| zqhkqVzw~@`Lsem$M@L)ACC;LFZ1diBP8qf4N|h)=COztYZ@6+JW0ijfQh}P7>p{BQ z76ee`Z}>I11Hr-E|6D~ouUMdB4s#(O?*c9~wU!nOW?$$EOI~r)JBP09i3k04+_^B1 z`kvP#oL^oj%R}BL`ul-tY+@RsU=1Q@DM^9SY7UM2-sWoX?roLwLYEJxzIM^2LXPT2 zfR%p{!kXAl)oG>JZ54tgIk>!@_&^4^dIJ!_fjy`8{vyI#3o+;0ny%tWq5Rw+?AnU{ zDouhgIHB3#n8L$vF6obRPwFLQ!df1@WxT4(RL&UT61AH22g~ee?QZ)Yq**bM@VMU( z%69n)^W9k?*TmUXvvVst1vC#gTLp9F6~eGGQh$pChpg>3TdC9 zIZ30&UQ4?Nmu0e{G}VweRW@`Mm3YaTL}8i$XYrS$(JZp*w7q_hWbl)Cc&8{dMBI)3V*v^(XSWn!B=HY2Tq9LJg!RAq8-aE-ah!+otv+z4Phq6IDd z<&Sxo@rS`WVMEOl#pff%mlmZjy_{4^yJ>f0yREfvn__-hZAVO39pm(KfnGgxNHYeN z+xirYgnZ}A6en~mQsWQG+|5P-o#DAk74FTiKo3{5cxAi}rD>ht6R5z6sw2$5?}w|U z5WNoibV9h5^mESNu%0r-8!G@XY8}Vx+?uDyBHpkInDwX?_bpmghx)^$*ZK!|ZX&6i zj-pEOjrpltOu4?a*0DR0C>dYY&@=o7@w6N1Rc$xt>G!|Wd?+y+JFvwkp&kBR9Tu!Vy3wsFWUWS2dl)c)vJk|5B$nD!JE91amv~)u^M)}p+p5#D> zza#t4TaeW&n%}C2ld*`r=nD>Mf2Z1X??g}$P%vWslM)D*YNvMYT$zuQ2nd5LA!fc1 zsy=K~j4VpTIVLs3=qUqsXL{R#tR!VAu(&j5zJ!+CTw2iv{Z*z5E2I&=XN2imY^E0o zFMb2BCS0p<;$V zL)H?ib&fi5i9F zz=nx|VHzvby9hw+K-8DV#8Q^yRC%HLbI^z`66D##K)|=V+^=n{h%qeGsH)2Yc*2+% zCMLz|CLWDcRI3;wk?VZqnHhtJ_6Hz{qS&UOQlzcNX0%Vnw&aQT2g;V zd8`eb#Acps$z5@{lk~pvh-1c+aDz>?F%^Hf910^)I2F+F7x-+J;?;3PFEP@FrrQ4D z(OKE-_xJ6fJrwEh3{f+_ctur&{JZ2&tyOBaOryOqsHlPD;}RcU(cae#*7N8J*47l8 zBOt7JO{jJTqVV6Ar6uEK6iqcljZtDss#&U=^7RLe7&&7omCh}$zqUOL;{sLwNXaY> z`~xI|04D?TqD>8>E(E3w?x-t-twlxppUD04_)lr(**VsP85P-gY4x&wgDC2LZJ&3( z&u1%>rCXY8vZ-ORl0vxpBTSKXig~2UXUZZVd&)R6TVSX+$ei(EwtZ(M(*( zqmeeW=&)Fm>q^vbOR`GM2BXsw0(t z$y%V14<1C4@;AMoL-KE=maetv8hKq)+$q(#Lj}ng4JI+WYbzq9!MVn^L7)DT9DrM^ z>D^(pOQodS2z+asuc(KTf|eYS$OyV4d-F!E-RVPYW1FL)5qq1@ng80AyTeD~Cv!WN z$pxRNPw)0K6JSHL789?aXiD}DIy+};DGkrEk@ZTTBYo_ z%H3(BcvowT>A2*SXi=a0Xiu3LGIGgSnx>)wPIwP$(ME)K7cL_ zj|v#JNDwt#kq39XzJU==L`~hVVGPs`@RUVJK1fXjX&@@omNqJaKy5JxTYwj<^+{7L z0G?K=XpXQlhLr(c+L3#v-yv7>SB!O5a3ilQq`+V!bd$qXa!2+eA5rv>gnn_kg3yp? z|6~#L?CiRJl;SD*)JvB=6R)`L$p#qQY9eR!H%N3NRowAANgb%H3rR zA2bryh32ph2ebZmcl)-V7Qp#h!HdwyR^%0b&6(~*{&(KRbx}pQ^=R{|`_o)jKj(8B z^2HnX*Pzz7>Ti}1i8!BG=j0sKu`3EGwQNSu_ZcFsDi5y&pb*80$7y_szJ|T;wTW& zpZsp51phnJ?qe8l>xy6)r<2hzO;l-x9_uVeu2oPRy!_H-bJO`Mi6b=s zKtvz}BdO_+)MD`k3xFWB5gJrHO)}g!Rhd`{Jj22`laR=UzjXDqNs8A6Ij?Vd4_I{o zs}Rr@67)7pZ%F-XBS#}u03Ae`;-!inQ zjxmO;5r&NeY&0M~{NA8w3-xQUl%@yrR?z0c%*!qWu2h?w;gkIgWL|FA$pvIrSQ!J8 z_n49wfS0*tz8-r4J{`XKe-QuI#5MO>ZKpvB1O(dq|8@7a`pjsQ{hycNUwgap|G64s z-ZcUt|Fbrrf@p>j{TJnuXb$|J)4_yVbK^f(L#v>f=5Mh7Mm4Q8&5-_!20S%)VgHMY zLNp6#|BED>G+qAh+WrnrN9O;XOJ%#(WB_REx@~eK{PR5YA9^%*zmmnZIv-3u=g7&+ zjpkhOX8QJt_nV3TY9>h@S|tDRfhC{}PpOiSdM1n)2_SH&JYT5>`C1LubwPA_*idU6 zRevh5rfNN}@SN{yo{U5X=uT~ns)9Zr4F7z(AlpEq)6-!Xeny;9ThYy(G1O1UtSI4 zXZupEUWV+Ds&CFqZV_9YT-0eUaR7WY_SZ8zrAIoSAh`yvqIBPFU17^`fACZ1dUS$p z%OHyGh4;<>m+VK<>&m;lC+dR>$vwYVtxd%aB611hf}fW(bgx6+HyV(VBT>||3b^Hv z1>gvYLJaUPDHBB0T*ubjjz?P6>$rF^Le95khvkv|sz4HHhl;?f$tL3^d3#Wr%a5`_lwim-urv0?}ohK2cRAdcn zw|Qwkc$&GpyWQ2%?cw9|@nPGM=g$GUYw9Z*`;YctN^^Hl1>n8aW#zkW<%Q2R8=WU} zPpnNvhdw{UxHp+1xq~ETi3bVaTsP>a9#3B&!uUl*{TtTb6Mu5i#&MBlEdR%!k!{mD z%vWV1id~PM7q0PW>}zZ3l{Q}gofWsPUMloeuezer zhOtTNJBs7+3;@pUKtJ0!l2|5geHn?&%ZimNCW#qsD28I7Bi0lZ-3J0`*QZJ8XPCeW zQN%M%RJ-_<=iZpjo?9B0qnJ5jmL1<~Qonzp>3H$DWt}wGIMWNAzw^~fmoBopL4%oe zWoUhs6k_Vs?>QGUz2w1W%#GYMYi1;`v}43(iMcOH1Ms>516m~|O%W@`L=g%!OtX#V z)#5@>Y|@y1Az7ixx>E_Eaq!i<(a?$_-&x6zi1p#ij+5iR@UWadwS>>lNhEuZV~Iy= zy2UFCRdPp8D#^*dsrUH&)iHnm`qRE!rO>OaN1IVEq-Iul)X1$_+eoqahH^*c=^DK^) zs?^H@4}>D2POwd5K4}_o(?r`~y3hzh*0$&Oi96^{r#4fiL)vN?rn6~hh)J&)N!B45{3sB;-n8cY*5(%rF2Px_*tdH z0qBzBk-D^I*QW`;DEy;}+V4X%Z2J)sC45#PzUrXId$R?cNz)n)BGKVX4P?`2NUOAMF8-mBjgD-gzYV_xe?1Jel9V+@^@8!JxN?gkk zlV7cJosJhrt*M74nL(r$(pdj#J9lzi2jFj7=L2UG1zf2~s+UG^sTz9(z-@pEEohJb zneso}po6|!dLI)ixLOXpvZ)U$5v4KQ-}j6aqv*|kC9@b0TMx5HW07k_qIpGtW>W*EkEVinYo|k(`wwcO;~_IPAA5VDc(AP+WJwq~kJo618Y;G-+CFr)^ zQ&z3rSSQXA;n&U+Cw1#jsGr0Yb4J5<9K13F@*biwY#U&zMO?c}Xxul3+_X$fipTS4 zYJy|qipI?3><@N`Cs4Pd69Dg_;N|bk zdZM{lw>QzFJz3U=c?2nH{*nZr2U(69(3j#Oa!Jpcgt5g;k>!_RMfeg!^^9BA{ZJUL z`tTG2oXR(M=dPKZBCuE-$V=>7ei{2@5KJdi=jhK=&4MdHTJix7%KdOiom9Y0SZxOE*3QMNCgi_O0Vm2l8*RmgZFh=36gazY;s$Pf4(r} zj1!-X6h|>quo+J=!a+&>U=54WC=x|2DPa07*2^z=X})sw_d)B#iBd|hdb@dxSo|Ag=0B&BA6e8G)f5xHAPyyj4UnI&jLU5bO2j#zT`oAk ze;%B9C<)A@t$wsF!%;rQ`pDJ&>Y3FZXI%I;#`HcBDHqM5BQ|C}3uF=#U8}}D401%{qx7SdfYN3~9#+u7!-irH^ z=%f4L#As{=vcb|D2%`X#-m#Sfgd)dS^?<>cfpirw)J&VKTAD%|syZhdJCum$l51!q zF-Ov!-0<`A{^|)Pk$HcU%K7aiV-eYd_v7w+^6!c?V1AZrhoNpCzgZ% zHMWca4WJ!jqkj6>&9&=1lQ=)3F(LcpAq85#RdtQdX~YJagLSW}cl%-3ebPhXoF|7E zqJbHPK7u_;0iW?}pqgnOa_OEi`T7@ZK_b(hV{jPDZExk!HlWbw#@>DXYB#jQ$J~~C zz%5qa+hT6$wbm^(zsd&E`cKkT5j2zY`iL7D65v87u%*(9;{0Q0)8hKEWy<0*v-)+@ zq1(oKvxeP}twdB1XF{t=FFd^14Vbo{caZ>-y4gHSQIw+u z#d6v$EtJ;{yjjhjwI%h#AZBN7T6WCEq7FdZ|4If~j1sO2mEHPRwM7Cz85 zO|S8prmj^&$>?dn;b__|cB6D^A^}lBgDGu_lfQy|)Xe)%Tgkqh>asl7D|)AsXU8`5 zk&4+hoqvhP%=mI64yPNJ&&d8bw*M*Q3ed`v?G%ymqtHx>Ax0*mn93LfE7Y@?;SF6d zP_c4-j3gOV{QyO4J7`wJ;A%IH&SabbvCdyxov)03 zxFo1gckdo-bvd2%em0@w#;k*I@^PRtV+19?TDorM(a)&Gg7j^f1~F#$x-4n!EOuV_ zee*CeOS^=CMQub;s-;I=DkT(71%O8u6sIo|+btT~lga7IcIwmn`k?B5UIS*2d^2P= z!acoEr+0;O)ia2+WNzI0afA(F<44`dN)E#8Z!)HVMv95Zb^O)U5Cx*Du}oEQR1UDd zt)7!BIBQ?~j`8DbYP_ie!bGi+8|s@Qg?f?nr6gfQl6VJ6y^*)d6M>7~0f4)%yjuTg zy@ZrRtWpSEeB_?fYfAStFCX;Aom|X{a|(1U#(?5b`7%Nktrq{~f-Bl)5?2=8&Js(16xXsBdG8{$qsdOYW{s7x4AdIc90uE zlA0(MG+tOTAR`r{R+SMuW5kT){pE6F6^C+;38Tq1S>Rg8TG7{Wq9+ zDPw@U3PHt$5DZ^Rf#~Y7q<2ao#1XEaLXI?JFyP|qY_@B4a4aU_6F}^6b&GCb7Xtkv z)AEg7=b)Eu;e~gff@ zf*C|0phLF*wvxesp#nicK>__QAAt6$$pScY-5hiL&Mobu08nTLNQ^h6e6}6dA8|`{ zood`qk)+5YK(UBM3HSjE(6+nn5Z5NGjwcpXqSKfpUQz)yUE@4tVJf2r*X&r;*7khb zTAv>sRxeiX(?o&1kUa&2*G*VgY7Im{hq09j&oz5U8vG=N;NeF~F)Z2C~-=Z}xC z?eG2TZ^EC(_r(|5oaQ4A5Z~L4Yigu3>@im02si&@#R*x zHUQWfTGKzUMA_jOWZU8UmfyyJ`kX9^yKo;ZyefRuk9e%NOR zX>bV=8+$mSWV!RX1c;Hn0REDVN#^h(mA2Xat;dx^&PgRxY#9&iurs-pcT9L3?65;+ z{})6fR4IPDa7@n+l5CtBHlz3KItIWaP|1P5s-f68OTAMj+=#X3B$x%1KV?3*|-QXxSxPl(J z@mJ)*e0EK#2YgMjpAg;OD<;T6<%EJ3W?6J`vHcGP5>QL0|Ee2s0G-WuP*sS~v9wLTwM;A3~TEFfYC)bDIjsN|cb^a^C zT=}HD-j;M%*1=iU7=TKT_P?FqlY~zZ=Jd$Mt;qy*v)jJm{YLz$z<rFrhe14|J9Pp8F;ayRN`LVpad{bx+yJ|6dVw+lAbqP&Sjyy)FyTkmW!jJbZZklJ zyr(YnnEnjWwF3LRM#Z-9qwJex6t$=MbHi@W?oW7N3_Du;%LERM&VaJ59Fdbb()-ZI zXm*%sLquAy$~7&#T6mf7>@=F6%8I+s=Wyn(v6!aUq4SR7J3W}C{gp$o8==W?R5qCE zdza$`jN1Rf%yiuJ%XKBkdghgTdW0sSev*&;REv$s7HlIv{+bZbdCfxOEq5j5pjy{0C<1+Pq9Kb3Y1 zC2#1FyTJ|Z8NnpO#n)9#oAzKghJNA#9Akxoc{>OAvCYc{E_|n&K}%l((+VcPt&c@D z<+IOhCsK$5zlWtJqh&dem3xjoP+#b}l6INhV1Byf$WUrD&3Oe+p3hy_BUDVX^m@kt z+I9v`V-)XJC({dpaZw0SXuD5^B!$z^qr)pxqs}=SlEW-0vBvTd{8T0OgZJ_@nPiOm zZB)4$PL@-lD6<(#DYFY}nhugsZeZwfI_66l5EitkZLc;?6m_bk12`Gl#Uh`qrZlw_ z$=+T9B`c_~UFQZdrPT$8;=TfHFo(qe_H?J=(B~sXhrROKGq`~Qu%i{60BhB7#?eCt zDY&(f^9bKJsue$?wW<2f<@3P;g%6w#c6%~UR7^93vuZPx-{1(fRcVDjL7a`DaU7x8su;pS0NEPj&Jz2k7C3s9o^@6kto+-x+>biWH#ly!>OrGbjT#SRS!i6(5X| z;Q2@Uh=NX%i63bKRB9eXuiW+k&v>qvX4!>`E-jRV#Xtl9=@Oc&Ge&5+;F@ZNAo6l+ za^&%k&?RHPk3bJ_H;zO|qU8etGh{#hHcw`#7vRyZy>qHe`5n#gRNyV~H^R6z!fFk+ zu-;CI-uYPk8;y*R{`;ZyVgzs;{0i(Z52D?;u6(ec*p0i3>YtC?pMSM4->$aL{ZRZ@ z`5C8irY-E0-c+4H$N0}mK&N0uF}I*284tUI!z^Up7^A%erP`} zmX|BLo84~dE(2K@3E^*5e2xdrsV(VOeqRNz88a-E-w_=*U4)UhftwG^i+fu#5d0_9 zGfN4N1BFvNIq}oTae=*izrJJfQTw-VXIsoUm$!-;9A^2^)Hn6k?!hC`?uf-ypst7cP43{mCl`wPT2LYoTOeM zDnUAE!ScM~grrNr+Fi*%k0B!_`@xUG3jEM?H%7u3Kwg^1XQ zBWF`y7!%h{H+1a;M40OB(H+taCO=8 z=KWbndL&64Pd z7R*US!#+2|ltW0-&4^^dM1uTjR9k$uatq6GIvcF-E2isBm#aRV;PA0Y8Pl0C_uO$F zf%HGymeT@&)+Z2FVfBglW@N@eKil89tg&zRfr{H)P-$XWvPr@GMc~7hv>Q!ozFyN6 zB*3bNfa{R)oD2+%~9&B@_>=$nEJ^&-(QapV;+t# zmowc?@Mm1J8ue%RboL?tup4bs4C4RTWKB06bjb_>(k6PzP}0e^){1ZmO*93bpu!dL z_6ZabkarS1f6fr9tX0j&1$)Tr(=uKIEja(LFuC}$@#q6ShCc;LRRDC zYEn_oGS!_q51hKt*v8Mp(^3;O$n@^njV>Pd(6_C7Zv@@9YZ}=^6;m@bhcTwo4^P-v zfC6Wj4w;A12QCGTykne<4bwEfu2$IuTzZSI&s}7QIx=|YycvZ5(VnIiXo_&8mYN1Y zE^jLx&E_P?zI0l{1`4Ftn^vMLOUzJF`%m8H^d9WzBbV2pcqqOMNV_wd-V-ePl4?6? z4hGlc3cW)sbK5(S|Mf%`eaSo&nZ>(0UWH!sE%VLnb3hC ztcEYS$COlTlNYjX(iE?)1QTAOdynoR-7;EnXY8Ps0Rnz*4Xuo_{>V9EFUCLso1O%i z&EM$)9Qw>y3mv@flamU>*hEr*<$K#9oO!#`HCP9y?e*5kc()TGB?b|q@jw@clboB^ zkdt33Oc1l5@n#UPRv;k@5B8{%WLmAo7VOjITUpjZqjuy3ZlQ4SD`DBGej-Vk=uyh> z)E%ngVbB%WNz7e+Km5N#J)y9-{dHPOnF8XBY(!MB9;t^vzzQY5FbRO9Y^c$`Ku=M= zPCntd(7`7;%U=Qs|Hh=KQebQ}ht$Ax8}M2rIES>e2U%q8ZAi1Y{kQOu?w=iY*CI{& zTey}7ily;1=sKb%T@;1BJNV31xQ^LPe4#AUa2 z6UB+}9!>k~asA4PaQ^9#t3+}*3pdplCCeeX51QW5v z+TZ8sk**LLPD$fUbV*>Tu-r&D6DX5}6_>NC$wd`Wt-_K@M++`-TVbKW_)$gmk4TQc zEswh;P%`4AnV=Xh0yUA%^mVx;$2YjxTZ*&*Hh|rtqQARN@J6k*lgKbPo<=b(kn*U&W6sQemSA(sr?;P)G+gvc$IB zztc%}Ot8Oxy8|EgOZk2nSjrC&AR)H{}hxh>x9$4TY)M6my))i0z|#DO2o zhLucxsFj0KEt3`d=9t8WlRby?19q{4JXVZ-2Pl%fuxZ&Snfp0jnoY`{!|XZEAh#18 zh=8_v6Wzv&jmZtzTx!Z;&!yv{*%BQ16!n3WAX?(?FeM6!Q)S(PG82*?Pzq^aqOy1L z>X-NHP$5gtzj9Tz2#C$VVR+`LoRazHu~)6nz&pPzrk_)J0*mO{6G2;vhn6*tx#JvJ z0S*qWYAdhIpZs-q+|_K@FZsU{5)K_a*+nG~Jf3e=T=AO=!LOEf9*<)R_O*y#58Um{FLX5*0(0|ibI8Hy(HUKwXRi-1nW3je?d z{4pwEr|G>_`UbDx+PwbD2DRuyxT@Ai4mhFw*Ldyt?7uB71qH@36*J88WC8BnaNprQ z<;doc&z*jHJKyNc+@K}CZX0nJhmk$_VF=aFHb9^&d`MJa?5-~QGS{|7u)=(@(8(O` z8XZf0O_u{_C0m8_QPE!DAFY9m3U8uPvCs{qLr<2oV9$4og+qaHrI8hJ=vU!vtz@ zQAnDh3!fBIG6MxvrcliIfVK6x3DPL;4BHAJNC8!EhbT}X2>5cH@OzyDK?3=ZGX0O%T42LUKd z)3;!R<~bcD!cIPs1~zoBRodkEH~Y(5V1YQ#6^r%D=;S(T*ZO*GPTNts1R(NZbgI`h z?r%_OV2NpsV%5_hdiB26eFb~P3vj8<4V(>pI2kp^url9&Pq~0PX7!Fqh!wp`5WTUr zo4tx8_a67xE+6N1Gw-6j80fh1QAEi##4ll$QV7oh$ct}7Eo62+k`F;#@b(LZJs{YBibs;2Sw1wC|IB;BSk&cn7d zb#%ItqDMhqn*UKF$bY~|m$V;)3jYS+QE3VS?q&lhL(+AK#R z`jc*i?RtC-OR0`iJ8#}dDeVPZ;Id3qN`(3ayQy{Ab!{P>&`1jkOd|)sTi7yLMeO3h z2koL$vJ`HdWHoYg2D^RBbT|*X(!QuRcg|YU@?n9+1UMUwb)%6T^xH?oiShaUCRh=e zbKh2Lju#StR|D640$A17-|_C=amrPYux~@+-QyBI5QVPO+KDD@#!!-HDrguXq|0e#4xc3>KY9P z+iveqzr!WkHf<10{=&9n%fdFuCISNbw=tpSu-(0gPt{O%bmgE7kDS^bIBr2h8Lj$g ze@}GfAwd4`(V7AcugsS8NV_cRH@kfnUEmpD0m);#>Ip39g2u^nj&yKe{)XwFikMjj zBaDCoNhXVc_>!~rU;~du=J`{HGe3ykAAc!KcBn!fk+K|8P_w5`+ySj0v3ZW||RN-Gi$ZXdpD z5}=!AiZX1>gKsnEhsd04dvhkZUEWw*gTveFCbp7$&q^IcpW0)~P?ED%*4!I&u*-fj ze0ZmS7HINViXNwwt{ahAtysvm?Z4!r#>iaoHdo`&a8bYs<}bqIcvK6r@xWLN7Z zlR-xdq$ZS$m3R2=yWo1IT=)v#Pvo)B3BU_x1o^$b?ZivtC^r5C_Y9;iS*$1825%8# zrtINyBHBoVh2e-h7f96rQ&}#v=NT!$nnM5U+8$+v%)x39;L;wOm z<1bzHHA6$_(B5SpfqyS79|$uiTBL`-A7W3@PYuV{PzBlQp+4V2$Pp(dmL|t{88Y4R z8~XI@3bX1epdu5Z?u7c){E!3k3?wg_DKhFuD7f+%JIJG?TR)$E+sNH&9701hxKCe! zq(QW?E0{^UFr}$4bPOm$(FdF#62MZrSbJU)oj@UVJ=xaNA1I-^Q!jvp8uSlh-voDr zO-J{Sorg8S9vuZ)NFn@2gvW2!AZ+km3AfC?Fc^P}>Mj@67gy)rrkeGA6mOe_X8_YP zdd^tysiW*S+!Vbc^b{E@_R@&-p%jR_DL@X(SSDn>BLEvoCJS|$j1&aSkl|?KR!YVhG$wb(-g$?qo^5Fwp z*9wX8439p~c`Vy(9$kZ(_fo6<^f{@Aqzr3Amtha>-yj z7l6!WL*}Fx9Eiu*7yE+4eI*MjllT<>ht6J^HHxubi^u%QP1_@0O-dv%D26V!3PNHx zX8~v8`aP8~S6X0mP_B*xv0GjvjP}jmM}e|I-xO(Qqj9|Q3k`nu8o+0WjKAeej3qhy z(A!W}MvD-JV4%L9=pAODWcY9CZACH>>|zV*_!|3f9C|N8Ghm*Ut|&dAMp!#c1n9HT zVJpb_d){+x;elSa_|}I$>SSq6``JCW2rL*5e|J~lb-RkVl9Oth!&vV;cC~C|g!tpJ z;L4>2NK@RNQguhyi8pD^&?p>_i=IJSMJ&9UBqxkX%0j?jT?|>#_p|XXBKeWy?k9t~ z<5)V#4x_)^0Z>Uj(ZsdVNoj3w~96NhTJTr4pAStXT*>8RF23z+d##v{Q?~XFsG4sz>sp|y&I_BanNTYkF>GQ8u`#~yf2gR9qt0%)`TKd#;>x|1(h|BfcM?M!Uj zwylY6;~Se3+qP}np4hha&-tCT-u152H(kAZ-|VaIs`@-nnWeY#4&N$uw({D-6)xXg zTq#=0&$6AG4qZYmJD)C|XMuwNFnB0YZOARTTSAokjU`R%^|`$F%>59`5zlNj z4r8#Yh|=A)-YAFpG7Y0mvl&80co(|Hb$IBlR6toLkX=YiK*qLhPGFRc znSm<9<^fk@j7LK~uNI0_$FmyoIVrY*3;URw?J{;WE@|7=o1@9_*{~CoaT8cxM-VTL zWmV5=AGW9)`c)TH7e(7ErN?SqHa7{Xa&y69x>KWMQm5gb+WIKU{KU!QKurS0UO5th zE5OA+hqJ1rBUl9EzCTe6p;~`>#OGbRU@Z^E8;;Z)*OaCU^d+N-bsg^9_najP|2I<3 z_q*E*(Iwg7U!rX?z1remZ^+L;4hJ~N_KaD4?HEvo8A$EcKC6>vj86Qded}NLA%d44 zaTW?MHt8Z)+;*eH{U@Yss!{lI9PchOqbZ|=)Fg`weIZwQOoC`x1swi6`~=Ob zuSqgo!wXkvzp0;^wYpWK=lwq8Cvc{E-2gt1-+78u9sk6g@m{IX`6ScqouB%S@Ea!F z6PEgJ+fj9>Y=v)*00q@FgU9Tspg_W)DOC)HyH7;Vd^YHHa#8!lEaZ-bNkJ&&6@XX| zqmPjA1TkqgeoeSb1!|NSm5#XaaOo-J_4diT`Y4ZTakO9b7kdmMtdJV)H)JR>KV(&( z-_F(R9_LsVY`1BeS zIeTI%S+j3yPiwz$+3wJY|BmXJ3jqGa*$NY4tc#kC2@Hb2jwY>$FBkD* z^Ojk$4ry1j5f@j8wjL4=eXs*-LSMQM(IKBGK#B}Bp<`n%s%$<#ojf%tx+xbE5={+_CAwX#+$_h06 zBAS^5?~YXB+V1|A3qArEq~0p1o&;g;kQQe{OJSB4=Y4~ARgzVa-b>m&8*~Y@e3^=8 zLmGdwgZzsqWo=t`<|uAyShTUQa-L;5!orPdCl{>c@Af6^4mK*ECKe3DZjx@H!g(&C zL%U5fQk1aX@Z5V_a%Ea|E5H{uJLOmPC?B#AsK~{+1LiNvNQ5zBN*aFN$H)vC81>#iKru?-Z$h*TLIDKyJ+t)7O$7r z^x0OM9;di`TGAUbLY#3-p$ynq{|w+v^E?`>HBs{$SNC?+941pf9~~xVcAtTMGbNfs zi2h^nTQiLM3oiOk?xB8k&ADco%$6-m)fF?KP=i_J#IRP>6l+ID&>_Wspkk7fz&hPf zh(T#xn8X&_yz;f5KNJ9V8wSbXip5um-6nBj;LG-v&ZNeP5wvO7G^DifvYjtglo8#> zBiT&FhBRG9D)u>4|U=?|FOT658%dAUc>S`OAbxPC==*p&xKq1SCVwIUvp+)JRMLfce0vfTfpG1l6m?uBdaIlJY^{QP&pI_WA#10ELp6rxtqt(2xYJ_xw4NHb>%9(|I6 z3PZyhfJKUUz|N3UXFoCBO?as%+lO8{Yu=iA-mL7ZVX`q;a05EeEXKYGeNbC7y=plR{wAX{vg&}a% zTV(L?Z>vNGv^di$DdiVp^s|;?u28=BynN1zBzjb{E(mEo?Y8SO z;0C1&VVYz@d!JeYNS{YvknmwIXVY>4>mJd3;?4##skKOT4v}po6LHzH;%D(djk(yg zZnIM8*#m>6bBoK1(qB+rV}K<@Sm0LI3PwKnP2nJ?#R!#M`0A0=ncl&}Jhe-8LcK79 z&9D|MOphmlZ0ClJ(K6n=Gl+%-4A~B#4R!53`G|F0ZvF1H%uOZf4QinKrxJ#KiXvC) z8}syfO0lBUK-Yz*D96-8E{y@LxPtGk2*CghLr;c7Rb{c7>z4w@7n`wSt>8m78$(gL zpgW~ZiF(~kj)3-8h`U}yfWCRD($s8c?wzc)cZr6cZt;EsG%VsisFkcaFU$)H>w9>&MjB)YZmO=z_oL?gg zDhVlORRB1}Yh41X!PMxW&mL<0t}LtQ4hJ;aUQ?q1rPQ!8_!^Z+It2_@YzZ?+f!DZ( zwvw3xlP^Zu*@QCK+8%c4tSA(q;grETOlG!bH*XA-VoOzOmP|zs_y8ETxkWd4$}`CU zCd&iGZw6UQsTsl#>WZa%4boZ72fmi9Y7&^OwGX$Q1)RNaDh}&g>I=FyodMoyy3Ry- zI9k9gX?~`w<31m2Uuq_?=#^yqkVqZe(+PPHkJ%53s;3DnvC4z$On?!fhX|w~bKC@x zqz>h*F5c&tEma=lRMM%qk)=*}v+^?p?A$APjQ3npu`!Pdgaa8oO#YRIobP&a{KT*Gn$5$t0C}tkx^4|(ABovRZKZ5xufnlZO$`2@3v_XH^nZw%E zW937(;w~jhjX5lMVgnY z11=31f|fjF6xJgR6Q)K|656MB+~%9W)3G$-91$G4CmZn5AlEl(W)2EE(RIM>Dl1VPs7??dT)+o(%| z8odeUdwAA8*^{Crj1*Jfcqp|Kccz@RB#_YR;(e7F*G1>f9+f0FR7qA=mzJ9pe=gGM zryh*6ncX@LSji8m2e`SM@B2*cf9`+vVa*}Zu7Y(rCL!MG!9EZ1+X4% z(yH(P1smq^pxi&~z8N`Fe`V7Lt^W?@AxIvhp_v|tVl}J}R5z`?Rx#nF4Ds@KQo7tk zbh(dVl>PYD`;0pdP?ZHg%2M+kt3-$DdB%(6eU}10cP~;JtWv>b@Ul?a>wK@>!H)+>HqE+xc;C3NpZ(&K$;okb@Pe=~Zusnb&87 zRhciA-b}xTLqDtSl!Mn#l-K2m9B^itbQh6<1Scf_>*Bm|4a_K z>39{^Q*SzekY%M^rR_$sNdFfJH?}-kvMsO?P&XUfa%>CCuX2-uJt{3TvWCOQwRHi` zTg`inaun{Aa1f3XJg_KD0LbEE0&&;ooSn2|TyIWT*pLf8=?PJat z!GGv?kF|;~Ef7%0#{W^Es{{RiS4%aXmf8Ob#W6{>1W5i9k86u-*+TvoP0DM5{wE%9 znGev4g!^yJAWrL$^1n!;U90MU_r3IMt^V)Y!i5$l)PHZU9<@~H|BFP)w1a{Fi>7{S z6N3Ctl=35FM@a#t)FuST+HFW6cU{*Ix+gPze(q+B$T9TUvIT0+=z(*pxT$MrDijJR zg-82;zoSwf2i6fw3!$$@%FbWfcB|Kv>)qBMHxHCwR_B#p*Q}eKl-J^wH=l0z7I(f> z$f$a6v$YT?d)z{7_W2!(Ql`d9A0_`wiezd&cVYbq`E162vseN^zoAw28$^Z2k5RZE zFa^aa!q^l&%P@q*3?({8G>R|v^j)FX6jzN$!n(vpI!5~-w74t7J-VMQL8oie>_Laj z!i$1h(d0^sHf=4o4x3Vx7h_YEMsC16q<)3CHEthg`Pwe<+K3>4x8iL#ePHLC3TdAfXv+TZ(L;3-d?OBL88_F%LmEodJ@L=4-=IbbSsmL`E`P{QfA>R@Oz%6ZKMtVm-pwwM*e_`3x}cu$1uA) z`-k4<1sey*jXgV0-@9xShL>gDn>e9SBMlL+m*WyDUXCA3M@v6$m-0!AP74y1}a z8B&!~VwB{dbs%T*wmv|DkyXj;pLHlmNA)GV>69FoClxyVHL6TDo7P~~E z9ySRLX1qpRcsyS1?+jd!1|T`}k=YHSysvJowCu%2G}(K$t1uj15eXShAvN8^g{>R z?D8XBM-0>@Qtk6`l&d(4W{)uh3bFK|M;MWk4P1X3rV?0A(?MTZ;vZNgazygSBpX$0 z!tRn1vr>ba`CmE0tX?pK-bmm01bYkwDrlqJTxdU%EoTKDN~6kNV{7<>b{+cwqa4o}pE<@3$03CArmV-~JJ? zOSNy`WWa6D$$3CBbJUluf>(t}%UVZ%FoP6eOX($~u$xaB@Y(dlPp?Xh_kj@}W2Yuv zQ8DM%UCQZJXXd3^D|TK9zq|#ht>I$GH}Ryh`CYz`^hN;{Cu0aFy6Xt`yn&7uz-Z zYPxjWjd*}=pZ9YMCNx5*m?wWuK>;A4rx1t<>zFh;)HusP?sdDa@~a4!C3(4KExUEw z7sbCk#;m2n^Czc1@HEs$oT{U}tW(-5>?rAesMHnY#~z(a=KHQ62s6` z5FP*)D5A|YSQ2x_h2=8=JAR{cUPpf+xwNhvw&XOF8cz(*U~ z!{3dj6)T6uO5YqMzWXVXtH(Fr-i*6~rpG3$o|%n(A`E~HU;Os4Rn7N{ z^5=su3*h9&{L;nBX9|a`CGX{SrU{3i^E4bVci)jSuyfSi^5o)Eg#!+SfP8y9d+z&W z%aH*3mExU`L0)1w)AQtUJt}>mv7x;|&)%$OW8E~!KNZ_3iy8iLlM)pA9%zV3CPOF9 zd<)U}N_XMu!#SKUX)_bmp=|u`oB`WiQaNTG9njOG+Vh(yKcP;0Ykiu}JND*g3WI)h zW}BQRr^^7t8}nA<1DiRPOz$IY^L?!9r7cAdnCTY;DKy*I3_!HaxIk|Ey1p8d$n*!i z|A>5P$7pEIyv{*Dvag-$iewVL#TNU@a;NHe0;hw0}sdfT;Dbcgk^MD5Nm z1{7m(=&lc&AiwrSbMQL2@v<)*BhWW`RilaxPEzB;c`U|(@c`^yHt$PnbDakdmSZ!r z7(1|SY`QLJ*HxceQL{-#KBNc&`aMqM$#3y)-`>~oVu^c3PD=s?4St&~;>zMX58&Gg z9LM*2&MzR{8l(O)btWmoR<{xdd?Gf;0vs%T!)lh7AIoft8>=Q@gpc7iRE8gRC>;?L z(cc~Tv&MasxkRTyJ7f=OUzHPs-aM|s)$O^z}P_+$7Y0vAuB^dl1#=)pP`g=pz0ESK2cx!DU~6WU5d1ZY78aD3&+F>kb*p#*G5=_(0t=i@05;G@ z+IzPI3nQO2U#bUgV&MefC0h!7K6fgN7wVE@pv!SDGvmlw%f#^w=B@*My)d3rIgehn z#c|l~C!%#6@5g6VS_>oiY;ye))`s^=Jqr-U48UGH@!QrgE?g9l>I6l9EJne+biLNrDd?tleH(j80J>qHjYBfl z6H{x@6O;nFNcFY+7-;3Jg&r^v@l0-u9jysok>^Re;jRJuK18*zl(G9o%d2@oiRS2> z*>bFriR#4Ipug$XXvRYl+*o-j%D83`y6_!U2tg&gKdhD&5?PGC_2)-dz_99@5es_a zJdEKrJnM_2Tb}c@sJ56V0B(3O0r(v;{r(OxsaD%OT)ti}ySncSChr$}H!1t_$Dx<{ z=gm#?D@*Gpd!pfu0cb^fy)Oo-QBCiy^q6kSs~W5t8cwk}e>TO!1V#{cQ^${tItlm* z%bHA^E?alQ%q+%)m(`?6YKZl}tbr?@kav46mqsTZ{}z&)W-L7Z1zgcuX+X2>LrS}c z-|UmQo^eD3fm6FlwWYF1mquZAifH;QMeUG{e@dHx&?9vt;2zfhyStJklAr0qZhFy{%ObKtRRFGkn%F_xo+JY1S;4~K@*OcLL3H|HYxv!A`$N@I-sybN=J0H zm|KkUAQroAvZJ4q%5yz_y`?V3LswGLb#JQY#Mhv++Te+ z4Nc*48=~~Ldjrn{r3!7b8e~E{3P$DrdtXIa#;19&<@{g;X7$tTjU*(j9{RmQ4NVxK z;szH21-ZHhFS`w7X^_V3ke^dnb(x>jxQjvKTd-LrM?EdOD{?UjJ%`?*!4}XgelX`; zj@%NA!z?~04?r2)JQg)wQho%tcBu~J5-SCF19fC1dTXIY zrQdD=Qx+4WH{?QE=q|S!CZC5TX@optNZ@M(n4%QWJsKn6@PmkhK)@{CT^f1$7Z+)$ z$_a7^suU%H^GkhGZ)MWi)p)sREdZIOPyzdwfw4T0FF*rgPyy?559~Pusb^O|y<}cG zOyx^r&Yq(m zzM_AMai_u26E}y$D|-JJJM$gVR~QEwiKMf)c=k*)T4`p^XS*7Spb(<5UPk*Houz18 zVWBg;e@>yYUCY|MEUvbJNW%7jCt&fnFc=Y$8304Y&@}va2~0lBZui;UxWE4`Vhqmq zJCzu9Ea(BG(Eft1{2u)By87Pzx?nVlDNA2q2=Fd)%GxbW5B{bLW<7;I7SEsMMlj$+(Y(;%c=V{ZPwd-ZOWHGFWb{sZQkA^@ zegK{@Mm1v10G$q!>C&=&d#ke``l-x)k~I z^jVSZYyVx+;Gyf{rz)6!OKf(IecO@3I_6=t6z=1-F;P$_d=yez_#u`-vV$%+3t*wh zY?Bv&0Ph$U1xx;$?HTfgPmuaK-VW-9DBwkEi!n)rq?f))+JxS@XVF%(+xK~)>|$W6 zM$zvYv!7kcf$U1j1ESW13>_oY=WUB!IP4-R4DprdOIlcHviNH-5%EvW(0lTSH)Hp> ztkGj_T$hv~k=J9N&{H=Njd6{P#wfzAIGa4 z#@G6bn8_ED-6lDe{QVnAH7F(5(0qdfzZXqGY(jiZ#BVyWrCVXiz!=%hE!^0 zk=OxOy$@qs>lhc;!t{6GY>46*MkvU>rpuF&svy}cI+l>5Fndb;g}Gv&p#U07%dlxs zPYBK(zQ}kb90PkL6mZjl@ZuI25D7wSo9+-LsPo`}H)X2?M#FQbW|SI1WTIe^HCqPvB`gzo(EVNZ^P11b-0a2tZ;bY*i-LscvsIHy$gHOwzQHV=R+Rn|e+pyzFM58&Ih`m5X#6b+4397ex( zUm(=WQAi1bZT=+|-hNQbij5ZML*OGg2m#nSXnN&D171M3-X)Z?F1w5@FG2L!);Yux zsK1FIs!9NR79_0&HSkl{VZnwEP46xDgJG!v6jt4*Jz*oA1ZDc7zZ77sykGdM=A z1%)xhHfH=Duw;V>tDNUpsqzU@N-eBNeT(ci(?G6T;GJHbObKj5 z&GJm$A=S7Ea;zv;j`NqFvCef&ML>^i~a0&^Y=B>+s9_ne4`K>8w~t4V;DX^NU{ zJ8B_@*M(AAwpDeZK$5LY(8BWGdQ~ySM~s|n}pWF@rFs4@)OVA9ZiV#sGR1@ z+tt(a>Vu;Dpq4oaufTA#dFWdN(jM_~- z22<=&zP4jqC&j&{7{iKcHrPe)Z%Dy(PI)e+QB^C7yXTzrr(A})S|ZNG67_dy#?2P# zBk+_v&4jq3l4S{6lMJ`zQ3>Q2X({K2OaN~CAV9?dRw7eM6GqcGT~|ihBSS8DbQrDo za^lm-moV`%cVfUw8u(Xpt>>bqg-z7B6_a3fwu9@j0flF2O8L*nmk5@;wfc9l{z8{qKh5UO`KK(+(x4sKt z<`~_$ON_C@+E17Fg@xr)71g~~9?kVt##(hW_Fl06eCeWQUcjJUN95u~S9U$%bx76y zIGFyG%Q=rQkDh5fT7Q8c9%ex;99C7Sg{9rzfJRcVp_*94uL*(v`+eaZp~NnR-n4l35dudwHSQ~17q;kIZPLLS#bQW3{x!HxUwv&TXt{D4>u5&Kw!WRZ6o9?I!3NFX zB)ESOre9>#GOaMufIDwKi8ZkbEaZg^aXw{2NJ8~`Bx#~7Y(kQDcl`Ka)LRall&H1f zU)D7~v7!Dx`L46l#+`(Z+}r4+s2IibA?PY(GbQ}`e!m>9S;|fah}>#PH)Gm9G*exG zOeG;o>`+DHe*yLAAT)qU5z2UvwDtbY*UqF@32rt0oNdg!WW9{VMnRqGan*06PDf4I z=7y~kL5bT2l|)sVz@{(YL-Es96vi4xf(#-NAYRmcchwE0Jv%(uHQJ^WU z={MaD6=_cPRi!KST?^$9G4(cLMO90rhnj^E3v{hk8fZM#3#3qM)M*$-r47liTJH^P z9vRuqwg$eEWb(ZcB-eXS7SHt9`xYGi2tr7t!3r&)aA5&PCGO3riF!6F%%VKt)~lso zt9y+n(gyR0I|kU!)ttf?`Okcy8|tZ{3OeD5$@JNOCiX4^ium0Yf>|oayI*d_ArHb` z1E;F;a;gjmFmODYmQlYk_+#avTSUQm(+`==?D?l!_|S>V*MDr#GtF4B7RR`?pi6Z!(G3!nz{lH5b6ECS!maY0sEeURdUh37uUb3u|? z+$(wDM+WY^Jam4>%8QSr@at!0w#ZL!$&dEH7MOQV2N@_J;aWl0)7Q1aI(q8T$AM`5 z1Lec~ZA5dWHmREHsfIpA@0sWea*oedkF|V8Mgbt{Fh9h9X{p3Yz$-v*h@?_oi!ixf zjMG)2Fe%x(Af_RFpQ?|Pnz{lW7Vm}wXjDA?g{$a8XgmeiOl*g=9=XLXS0TC^>$g>GK45;>;Zqx#ofUs6$5 zk_UKs-mgf$)v&6~_x}*ebDgTAMrZ~EzO-IealChS6UNbZbtv%~8NmxZed9sbEZbaD zZRx3c$nn4w{&-vMg;sK`!@~<2W|Dal>e21`Lk3PMX94h6&b%N4$uB%hi2!d3B~qa) zGBs*iWQ55U3tfv?>;F?%fm}@WZq!^n1sHxbQ!bR1J#XA{8;TKZl-YjzrV8$XUre3o zlTe^Sqc?bkt+tS3q+H4$W0;j3UqTJ_NFoNZh|7a1tF1Zg+drTPF_q5oi`>zhnTgwd z8CG3qFam~s;X=#RktN+G}9XGIyV9Yi9tT_fPODm z`e&g$De!+Vf1cVE+enHB({ZbQ{R{yXWsGHu9h^D78V_5HPS8l>O-yTXy_2*dHcQ4<7A=>6q8uy^7Z=87ofoXYfbvT@ z+Yq_dip+NlSu4|xQiFwuDk#D$1)RhD^A~-f)T!c_OzGdhn3EA{p;Rf&ncJZY&S@JC z`Ke~nuk<#Iz`(adaB_n z{@jTqsH=4juz4{&D_ZG%njBb|xhdN-!ufZm+zeOFCj_bJ7+IKWpS;)shYU8iUV7?a zVZf~!#A4>+pQeL$FBlGk30Jg*UO<&Lo;ObPlI}sRumtiqQ!-QTXf)#H%uc=2w{$$G zi)w>~MMTp23@-eCCLEIlLK&(+@D?sLv@YNnj3w*pGs!Aw;Yq!vT{*E&B&HEeZU2PO zd3w1zc&4`DOtst@AOzC_7F)I6w}<7ir;XSK1Uv@M??#SK-SnK9u_aQ1zM5b6Ubh)w zse@-!3Fs!?kyLF%nRX83%lhbx@rCQSNx6QAa8x);dqSq?Q6bZZ5@ldeNEDLi&kP2p z*vBYdqgBmHgvdQheCcRBbl0!34!?|;MS6tyMmigaEoI?N*+vB zcCnd!N!SGu3ThfP351$k3wzg_Gt(#{kf4|&PVloFdof^2%zx#yA}pL(akPs9Iq`AC zc?22@323xC>yN;^_2-iD!uH*V^Oxfs=OuhVt<=!LY$ttkEYtaXSPwx?!_;(Y(YEvO z+HvYndf=xmwrvIgy|*5;yvN|O1ctkzhtm>v6vn`Sv(4`U%E_Y}~CK;DD6DQCnnL zEwUwvCvw5=Z*6W_ZD?ucQaZF(n5S0u&%+Tk4dUh7U^4N_b8aCB z7YEQxdHJH;sZzvPV7ermjFoob_FO%e?WS{j)DGY$!CSqh7* zGZl9!i@C3WNo1Idi@=Je=Ei&FAA0s~4pdhL&1FYS%Y_N{Jd-4E5?0GJ$khZ~?%;u0 zNwWJfjEe)V^IQtX&Vg=v3+Aa~BJdXwu zvjmF`kQ%BY$3%mKUf!=qT2aID&_~=Iqc37Ez|BdC~xXsxV#pBUiZPVqNxA)-3o&iEbA`<~RjU zUcnhjD;PMUGSRgDMGT$PWpr%LbiFjn_M0Wa*HSG!9D99ti`kpGhxt{J-SYtKD@)xA zTYu4%Urh@oDMPkHU^UQ|*%hi|7#=k3bfQ$@>*s%K(tp*+5G`Ag*`n&D)VtSg%Kw-z zqd6|WqFy)6heuSyv^j2jPg^Ml|Lp4Kmb9bpq%m>Wgpzzo&*f?PulOWbtPkQ=wU}rw z=IwqQh!+y(1uA{s*>XjIfj(s>rKO5ZZMsz zHh1IC{JN131$>^HK4 zG-DBu9AKVr22vk1gus~xiNr4}O=J^F=A~9;}YbvYA2v&#>{3k3EAa{T&yf9sv zpC6X3JE-6%9+^#RthW|EG5?QgG&O5J5L@{Gj07SlXDcO9DJ=UBhl}_r)rq-)g+N?g z%XBNvh4tM!&diFL_gL`bFA9H1#OwnZBI77aX@j_XFG671nPp8a0h~B^nygbv?%t2n zQ?3cg<9`Rh^-^Fh7)cWk0B<}Ix&$YOOh--(NlL23yg?iVii8Hc`4m2LuDU_=5p3nK z@jpt%)3|vF8!)1TB9e>@Mw&{g+0TK}yE;+zwWCEP;D&o~nfO6bidC{Qa>xE6baAN- zm7}V%*7o7j(?^1&bi62LoZ(h8c)8`c+N;o-19!>UoPnd-jsa21fUR|+xBNZy@lfC) z+C)?meYMzfm4De_<>IMw#2l1_&UsO(lvqY~66?}1L`89z6$JNcssq$i?s53m?I_zTP`mT@BwiOHIC3EO``kkhia zm6Ak?$(v{rM?EqR1DV!7OKMeqlh61eCuCv-{v6yzM$W*$kck(?#G;JmHt&})6R(Hp z6KDg3NlUq*k(fc|((7zh=vCWGBzH9qk6vs*b$ij@55=7cz}~zslNe+T(Pxe5xI7UB z%F`RL3fd$zOL!7{W<*eQAzi7MweT8Ea%ruFU<6D8ipEK%TSj66 z2v7DnO5WM#0~j)hnmF;S!&Zmv45c7?E-`v?4zGYZrwmOBxL^^AL5eeIVb;V zmMu{aL_)^#FC-IqupLNjiKCDNRf4iea>}^fu&4;rUsXr**jJm%yh|=ex#o&-&bnj- z!t%_-1j#MjN|D9C4)wZn!{JH4HBwd*Kmj47`Y2@|p zt6t=Fqz7g`T95a#7w4~>Tr~{ZgWq-xN0N*$fWv!&N{l#rP}RNzKB@o?p3hk8Y@Bx+oiT*y!5vk{XL{Imo#yALivdH!Acx*)#@2YNQg3tCP>N*-n&#pF1s&j#?Mi{^mdvu3>22(H0z&JYDn^>t2Ffw!OCdec zCg`fdbHLUlODrJG@%=?VwJs*KQCg7JLHaK4>JF&UuJx_hBpo9kEQ1G7HHq}O`yGEy z61mk{Tumr5$26=$tCD-*glp8V#K*Nxm8H&%iekNp(rJm7(`*iI|n$i_6f(p370GbJrPb zA#TAgaqwU6qPyyx<~{tEr~;~$Z1m?N1~b9??XMoJ$1aJl@}A&!)nr5rnG`rnPYrnr z1WPxI;#9eswS6h)lgHTB74D1YZAtM;O<#kjCGHN%w)?}^b~kiDTf6v|skVJQg0GF- zReXW1O64??`;p-o-zcw5t5esh zAgXAd2GHc!u`$~%h_{f4{f}-vkSpZ`Uk)pouz9TNV_v}NUi>WVciaFasZmubeRksM0UR! z+rP=e*lOxt-`M(ajbjr5Xz@ls6TnNoMa(Ltg*GN;Kvd=#iVFzn+%Nd8f6Sp80DD*Cp1JBw8 zH`1JC?St~!$l>WWsv(@t_=>^#8rU*1n$Oci5*55aAjl<{;D|7CxZ{Qgd2YG}>*?yi z-#{%cjwnG$u~;cn)u{}SXwCwhU>cZ^!0v!^avpro&0u$02*INLCR~Su0Qag7u~Z&_ zju*iR>QZ0FD4Gs4OIP{{oIGC`r|D@i&_n=LOZx6o{z8>(>98fe$nQ`L8eBQtKHpi` zmlP4=EX4hEl@QkZKchGs$CY`ysqF+^OH=TKptsIxIHoAT2ZBmi*t)3kRCRQ>FJyvx z?={wODG%*7Q6F%9<_WS5#`=GG>ZJhy1>Du7(dOhVhKPQzTXbJvb14X%D)k0`=zarD za!M!M13&8qX4AF5U4?;uQ2P}>&i8kyl-6P`M~K6@G)aVs`qfIqQpA{H1!D$r6MGOz9wBvx96&-t&n7_B(aEpg)sV}+xKs3+e z_p7xNs(1z-|LQ>>-nsjm$Ml-DjrFCi^)=lHWXUiQ|KiwYak$xLn6!5oVb0@+1Vc6h zw)8~r(h+Pr1%CP6=%Mp>* z8gZbwDKp`c%+|^ynGwq0!jIc+)eNu`J|3IuALmf8g)Q9|5d~#S1M>l-nqUIi7ynzG z$`6eITb-0kp|r|H$xr4tDoW(6ok=ek?FSXFPSk=x!0(zr!wVzfU}k?SMXfsWN70lL z1btgbnFlG1HKV99Iemzyl&bG7e$tj+^Td1dqQW)K=jTZlT9z`7dGUUp)oJqoBM`ou zU8WL4w{ZerlsQfYRu>J}9x6y!5&W4tMikkEoAJt=#r{A%g+W|>z=R9+r_2_yD6r`6 z%7()BBJyHr%bUZ)ZEy=eyYt=NVe+@W&YVXoj@fDcUZg_J(fOrQPEQmSh`lqrUOk1l z8z`aKRrJn+E249ju2XifpA2o@WPIM8uB>f?SBPy$H-Ie^U!V!8w!m3muLuErvbc}zu5>@x1&*VKgn4~_9CJzLC`7r=~{;xJ4 zZ&D1ZcN5_l*vl#$MNU?0`luFh|L>vo0;Z5^5fjIK(yV~7$kzS*8+u`fK=&DM8FB+G zUs8Nm-8)OVf$Btn>r+ckP{0$w8b;xJlVOy}I0mk0OO! z-=l)nAPc0Q-uJm}-TuxPl5?$lGDaeGQry(FVN4bYEcEW}z0S@jok?ZJPE#_*j1y^E z`)Dse|E~Bf3sPmT$bcz5ioHHFSy3@uQhludfz=P!O6ql4V{5I=*ehIJ5tu1vzCO!j zW(_^mpno4Ewv{Oy7DoL{6H;{PG3rQnyYyUyUB`-shL3ipBqgAsI5bM6g2;-yPi-)r zoC{6;wOL@fZR8Yvz1%`I!!)U#nFwR8-8x)Rp7Gp3ciXMe4>B>c{h?4I{uV&zY`;09 z`xW5EkyC%SUpTphTZ3;`$E#nQ;-}sH-H-QB^Z&Sd$KXJ^t_w8w#I|kQ#>BR5v!jV^ zn-d!o+qRR5HNnKX^FCkIt-ANuS-q>P`~2C}d!OEGt>wmHi*E*bl`@%tQ{1NF@!6U6 zU8ZD#gtdPoi_@4WMXaPWj@iGCZw4iI4&_h_H>T;;9W{VFG6fu+Ls%w{tuCcS#qv)K zSXzn-3#+++Q_$ZF`UrMRNR=$~`=3_^Cn!>PHzY_zVPS=1pb*Tdjp78@xTY>JB<7Oq zVLQ54{6v#YfyZTmt?d;+I$4qeVPwe_a^$xR<_co+RUVr-#_WQQ;u>(8V)e|scwL2r zf7*lU{>q9`M1P#t6{6rfXS;C0%j06P7Qs77^vI!shilnJ| zLK>V-s%j0CtYwEW1l@+idlzjt)h93f15XwMZo<#KPcI6##hy5T@?EjQxX&^-ze{H*o#S%(%SBd4(fWwJ{>Z-OCKf!h zN;AszVg-4v?71L-2!7irY;Ad38wF3#(m`>hC)U+U*Dku2(M2GC^=Y`S_tT@p);SIZ zQUIZP?!a0F>Y1|YMUzf)vAk|HV!sB8=Ae0c9dZI0GK{LsZ4bAIYXc(UZ?U_ZM%?#A zJ%JpIXd9U`B8}B%HKb;7Adc-+bQ|N_&J3O1mrJ8MZqhfPMb%rWcfNacu5 zd6!a3n^_-3X$>?EjR`^}W-Q|PYyWJN+=OxGt3`K0xi-*HUQ*P+=qpJn4^voL_Hn9i zf?EP^Ou-CH#voZY(>l=Tv=6r3<62=YSm<%^Rn05cnx9g?ct*!>Y5KJ*qH{5tBk-P9 zyPNbogV1&>Qw(FUVUpB`xHzES*Mn^is?10!wC+;>NevSwT!&k5|7K&|P<_n!F$f$y${YjCHHII6_qwAc)~g>0iwX0=l?WyKT~DYS z3YF%p@oqUREzU_)mVM-rZ9DuzDYJ?N|KyXgWo)dXme?&nF$~h5B!R*YO~*pB;D+Yi z%+HpMSZw2@?8$wFORHz55tibvs;@cOhCX}dF7_S0{ObI%)uEHYsfGMylX3Xvuj2*D zaNIKRdi~8sl__ePKKx{OvITa;3x&g7LK|w-FGWTdha?$e%xs_48sw^f{=ouo;@$+@ zU3|g8%Mk6-m`WsG`cb?Sx%rq6_y8%IS3rcxCVfs+!W9qe0C^XN-cUw0E3(xhB-Z$bE25_{JX}O2j8~bA zt^683bdZLP%7Z%I6ReQ^>>2YW?rpZ6tgf=PtZ=$XZW983syPRm+ zA|o2tumN&b7E~#42YhobF&mona?Y=TD;@<8l)7!9~zuK z_HiUzN!iqomZ;0}gj<9Gn})Wgc)wc8}`anuh=K+1wxHKOgP+XYz4zR=3%}r*gLm z2nv)}UbLwLxD-~6;lnvet}2h0cD_jx8qe!wi<=LL3^EV*IZP+7RO}c>IM;azIStB= zW9k8)o6$eJa|eG583pb7Pu*>o?#UY{eC=7#Mo%L3eqBsw3(Ww$O!*{vpMU@RbYo+! z4!J{vfVkoP|49T6A-a6PmAwrIwU)KuTZd<9GB*y9~Pec{;N)vsklTPAAm4x+kSL8Za>Q)j{WK zgr!Ws(-XskH0%WgjRv^XMc46MQWIG4@%@@b!|X)6W_cn#Vv!rw^LIR;ET%Rmvi29` zz5MgZfwazpRD|PdI`hsf^V=@vRXL-c+RXGe0Jni2g{buVMWtXz^n>rlp48VPm&d^3 z5)zX(Cq|Qr)Il=w4d5uS(ex{0;2uiomGPM6%kr2iU?Levzbp>{>idmURz z8S&Emsa8!;0Sost=(`tj!%ueOS*&u_*n<~JS23pDhTi~jD7(maiLrS|6cR)v0%ES5 zrfB*yu88V!b_EEQVw8MZ6@h?#3z4kmUgm%8rW7843|rkZWn!R>`>i^jsOs0pGt0%I zc076ED=HP9oAk3~(1(d$JmY{PdjrykbJq9d^v%tt^{JQK@{@*V(SwMK27%*#x6P;a zU%6hIGu*ilfSgxnszO`9Q!OXHx1!`pLnjm0)xdqtwxj0B76dTNh+i3!55q`~7=$OD zo-Gd~knH-sYZ)qHw(pxC8@OQJ*b+uiDDf*4Z$gZA{ygH|Rteu$e3&Paf)LB! zvD_DxbUsag#mgr@n4gU&RqRVSiKY_+6D9??nfFuIRx6*)M}Bih4c{vK?g)G%cQ=K# z{F^QX9gg=hUY<%hk{%%xa|Y%h%Z<^S7P+j@{v6yl?G?Oy(OkuF05cLI~)o=7}-rD=vu z=q6`!?E%a{y(Q{Nr$Se5F#~EHC^cfg+`ZDQ+@HP^C{x1*Q+v4l?p8gab?rvmw^7;x z6>jGRg((In?K$)`vfgp;%Z_MDXmDqA5cZwbquZ*iCuI`!)iI9`-0}$%43f1MnO)Rp zkq998pgvxtCgD7DJ!I!JqYyR5#J!`t<@E^p^pWTnf3xmAja`a=?AID0f0o3APb z;)oSOp4xAv+A4+1NaC1?abF0BPXR7hC%W+6I zCiJX=^-CkMFlJpPLbBq0D&33#?{Jt$s7ZbD5`lj1$TbXM1FRB2AB*kdaG6`e;z<>` zAj|Ku4+YEYqe^WZU-e5N0sMKLa&F#$-7y%Q!Wkc=SfJ0b#7scQk0MMqC$#*-xUPNy z!S`Zc4@dM-Bho4u=Zed`4wkj~YnhVE@QgyJgQbx|!SNSf{KzNASHHsZtQqf;=XZOk zKx7g5^vY#ug!2<_pknt zZod8yDuo;3nSn>kYZ)<9EIIZWq92R&(`_GSc_n@a&&F@g4BPJ>X$3*e5CS+U3?fx! z=k~Z%>qyfoY zMrbw3OB`tic2IlcLUk^CVnd6WGhbPr)?W0yQz>h?ue3#O3LxMXX91O2dx0`5$H1Z$!HxXoFbfi$crOgfpBDwldO;IE)uAGhw2Ol@a;=PSUh`!>Y%5HLS zqny0YCsi&Fs_4O??~s&rgsto*Cpq*<25&zq+VVLHYXvl`+kS2fYJBWGIkvmwfxuUA z^>b(eu#Kg0A4A%9st#NOA_Y6Fo_s79Eio-*pdf1j$l|0B`(-=V9=%Sgj`hFr+Jh2n z;J8q2|1L@oW3Nl(`TW}3CPuO$)(hdM66Hf;dN?Q6Qgx(b@6Sr@b}owcypvg5b!(L> z^x6EaU!c@2aCe*-sEqvKS(v^pXut)_8`dCn8zmlMSgr+F!^EYuLm8-M%Q-6*lm;UFF1oINH4~Uilt6K5Z3MJXUVB586OA#(m zHZsRppRUfRv+tiZuaeWxl$04>aZ}ho7Wi$X*~%A|IC{^q@Ib4Mp zA`LA;0|v#3L8mY=5Jsk!P&nd#Vl}kEus!Y{3Ce_qhd2?A5e*V(H-hk~UWaEs@aaP- z@blBcvZ8iu1?Vb7q$`qe&c7$c#}<-dJNnMb&vIi}u|TN2{7=^ia70Ch7J?;3GjYf~ z2ww6K@|HwL9f=O3h@}mPOji(q7ME{DLYF+7dD)$tvMX=Y&hBfQP6zbj1Ac5Qg?5zrJl^fxg-MM09w;oCb^dj+d>9zIxuY$f8Tiw2^_#hKaLJx?j@~}@qPJmBfeil zR&!su2A=zol322AEH1$JJ|%^tPo$1LM<`Pfj9>@v@U__LF5swM`Mh)|x;Iu3 zSv3orn>k*$6iQytkw8rNu*sZG!?`2D!8zMC3DYUmJ_jo7R{Z2wAA@4A!s95Sr zG&YuG2+3pK=oTb>yOo!S^#v7}VPOr|x4)t98 z0gAU&uX)4%i2m?zt;0|t5t&0Ihe(Ai4=p@v`(IO`K1);wk&kF3To&Vr&zql6%irJB ziLd;J=u+w)xwEdI56pb;L#RWGr0s@S-ut;L6Z=%Ol9Fl)a;)b>aIPv^e+Q60g&L49 zX(jvs1mA zoZnDchRzrK84ry`Jk$H(tLQAVn1dj=s`V&UGR@{{7;OyZmZZR<^KeXI$~* zru59FMb%uqEh0)X4)3PGOm>q0w_LU+=wSoY9sFz%M-(NCNt4>AL5-7a@D=crjI;DG z6E7y%{{Vw{U1a=ZKlT4 z_AKZwp!=<5KfRy>_1Jzw3a`{Q&3UyDW=|CjyLX*Buoo4j#!o_W!8?u52w+7H@3G`R(pRmtX0^LqX7O zoEwcI8(q=phY-M5*lJ(kUSf+fAanPcMwFKlE13;I-JIUSbHOL%UGtSGL(MVZUuwccx(%Xux@?Z z2b$A03g-<+pTH)(cn>6Kg9+Pq7ljraq$Q#9Vty5tiQDO^4wMM@i`fQ2LBbhC53ZYE zh2ORJ4h4i5eAkc_TBDyd(!vncFz3eUFpiiaKpEzv`B18yNU$UW6$Q`w(qQMRK)-^* z#7>EE1v@pG+z%=g*>B7E#j8e-18V9Cs##$Nx4cz9-%_2$@&U}j?(Oh_(l-L}nl6+^1TPrZiZfQMd+KG3BKq$AeZ zP@u?>CdjOZ{8$drpGq@FdJyR)r6d_YgbHA>30g4Z_5%!$;i0RO3KcI+j;E{y)bbQ@ zX`EYo`+JNBcbu?A`KL-&KzPD4;zc7$AKH)h>AXrshj#K+gKcBLpVa zO)w#z=7B|FBI}_D8x>=aIyU19@n{MrE?u>76Otdq+OJ_g&Etq}=N?kgARuI*+*ZBm z1ACaGPnlnP_nc4Ox(+Bt)89VTJNu@)8bJPf>|fPBo6P!=2kcIvdGCiiB)pmI;(vW` zTe66HUNkuJ-uk5TL}91cBMtv9_8Tjgw@HLy2?K)4P3G)J;?63c<8f%hbRO%UetfRK zwo@1e^uw~mP^pKW5^Qjm3^RwN*hHX9Nf2U5OoXUz$EkK#Wbc#;5m=cRTl^>qyNZCW zV@pK6wQeIS8T?)em5aKQSX{kOf$pdr)g}&N0x7KDWOL@B3(1AP%Bc?#h9aMSc9GfLT_y_UYcK}<2I|9N*ae05W^h4K$32*w5=`cl|b5SlYFA{dr%ov729v^6k z=1=0CEf_&1s(dgy$Zk=B*cDc(l9)4;Cb}b~A)nq-YFR?#MJ6(}iI1dfbIRf+`N~#cfWBKI`;}Te zXrb))K=5W5v|-Jkj$(rX=}&QxO%t|d)#5>nS^~c%E>}y|4x6r8H>i*=OOMO(7J5+) zP92n{VkjAD)3P2HU7|~Uc=FJufoFLEsg2zU_;eC+6W0k|Efymer%SI(OuuWT)1aVCwmCi~ zwpPh`$BaA!I&?Xoe0#8xc6#6RXxjuqkGy77t{_r0zW%Jq(1udb$RvVLd}4wtH_v%< zLC$Ow`pyy}3ut;rtmF^E>d^5mpZ!^ZCdXg1@S<256d z!Y+-#SLb}cCs7Yl85?x-epFKKON{RE<7-b|RuSi1QXV82^?KztzqL2*khQh$eyWsk!dSZEA}JA_>cjYn6|XUvO;jB*C>2DK+R!hoh{rH2>CovcNt zTf`XEgcC_w{Nc}i$niuc+2#c=oR)N2Iy{k9Wdav?NDBqH#MRYjWGs@xISCRlsuIMA zVw7jmUH!-f)cTXM_-c|iXZL&GK!GUez$7LT1~u5@KL@X9f97Q?be=?%sh2^B&DVXDZDRS>m;e^ z$!{PM71S-5N!E9l?6DE)05ppucq#0foS|f~3pr#cp~Xws`;0Ph&b&6lxKSDu#&Id< z8*_gNYCEKSARPr*Mgma+D|O!!(X^V#L= zznaO{`Z9Ah^o+mrhdsMOaZ)SJ5nuL;9OQEr$YYyOBtX%&G-tKmBBEzfyh0Z2Wq-_O zZW(7DfqrHpGSo_L)igGF8|w(z%e!(JIj^UTe)u_wf4_`Va3i4zCVhVzT@^LD7ueDE z@Zb<^RYOMP76PD-qxh$i;!slarWKUOl+S0tK!wx%gMNFvdYkJ1DuJFKtUYb$@l8(? z{nl|-cYtM>v%IRz@4N^_U~W6%td;*0!$FBrEhmbG*Rd!OZ%*l| z+)5~L4emx$pzt*qeaZmJ3oMhD7g0OiW*g)*Bz=o9S zNR6Js1f<{@1>mu`t%T5b`W4`n2o)t8>cq{WFqnGd)Y6RlV>Xh*CtI?*?s@14llXbB zj@|lE8If-wC)zut^b}dK?q%PaIzWh|&)I0IsY-iL86plXm7LTb@lh@x# z5SikOD22oFqtUXRaNC(UO9XJUhX$3!@MRQ#0cqTiI&gLC*hS+V2@4v%24Jpnv)^}f za|8VR-#@QDD?e+!h_w6oF4ryUyx5cienk@-HFL5N?gXuvwqoxXtHfxBdm{K6BKB0^ zqhp*kECnXOGJ91D&i;Yw?hayy6_#TMZ;1nSYObaGbH%=pic~lJj1+YjQuJOxy-GcC z2Y9?|H=CWic_aC_^wTCB3i-#6f=LhM^Gu<$V(o3X8Z*K?d<%(% z+L^CRctOQaJ3x;o4gsNQ@I@bSEye08xG7gb7MX zdV{f#%IDGYYfcFYP6oYekR>+~K&p^Zcx=lG`AA=!YMcxa56>BXPl!98l0Fvlerj5y z@Lk=W>y-{Uc|h5#P$(^SJWhSPR&Dsj@&YKzBH>^0$QG zWG-Hf0s&_%iGArbtsmnCciz}KQKX~s3JUn%g74hw+5-XJV*tTpMzg1pezwRv7(M=_jX6GZjiJQ9Acnfe{g*Rsy^|8JC45gd+B7I-*SY} zfV!`UB7H%1%V#b-3l_!7GAkI`seGJRXY9XfON2sSkj=Qa^zZUiq4oS}L8?;5RLHzwU*K!+Z2MPgGez9mS< z>dB>m$`xybruVe}9~1e%0FBLHgQ;M4t&2KwCRN*PX6oIoITTIO=}}Y?%EbXcL(&P93II zMYl;@SE6_U+H#S$TUg4&<=-n7_8|DXr zVhd08b8bNu2~g^1H~Wr0P4xM;{Iiv;+E<^X<_1xkYyRQOdcQdD1Uiw7qS#Ji$X>8sHjGseP{l4Otd2Iq`L4akB8}t%UoBP~wY7$O zscXj#1?Uy34`Zf^gZ< zsk>8DkS%D;hb)A>PEEv+$eSgaRs`)^(ZT$IszV4MBZ2nBgF!JMIB>#t#I|Slf5AZGmJgdKSvd%Turw8M$8OuF@-)Fha;;1oxY8@^G?nbQziy*`la!AXDn2cKf&_Ua)5<`q)5=&A z=qr+RA{=gHGo(U#%Xs8fure_r!zs`*02sGk)oRzUh5aR6xsbMJedN9Jm4mD+*J>Z& zFj`jMwMq0+x%%^l-2zukCWubJLTeM8zd_6_gyHYunNZX1IH2p=mSIPQ*H$B*8#yKE z3f#hrX|rX?ZQykG2F(u6)i(IiT`&BEqFTqP@nJY%-? z38ea_vFJfCN~b$M|VK3&szF{UFsA zN~f7;4=G!;p6`2yqTy$5=~ zL`ISWLbx}1I~9J+dLe$Z?cXhXk!Z;N`Loxqw7o-%tC;l!oI97rvQQK-JTM+vVU z`cTU`ssJxv`{2&~Z;+FZ9J|m?ucVy#S^d)Sc%|>C@B@eMye894_}OF6?qs{lHm2K3 zkFIzZl4o7mUm(-Y&04VlNIAgT=)&_UA@Om9>XpKN`$Ju@uH+F6RWNG}M*3OWr1)Xt zEjVhV^lA5bTnuk|7~AW`U)w?dQf}{Zw1KbO9rD~$8~ZbqHO`^##j&&};4KQZZ(h6h z;k%sf-&T4|-3=qjza4&I zn<$5Qg=}|_1vGfLjP?6^hDTT3qt_*+5ImzyqLP9u5l9_v`sA*Vu4J#p10 z>dRj(*r}uz6&q48Yb795P_+sBjKB8ep&!nSQlBZv=98Eij108>-|t7{qk7h*3 zp61Cz=h4gOm?aC;g|X~6=GsLo)Into)+sXIU*})$}pZZ`+5gBnDK;1$;CK7~3(et({fD zhI=|wRP!86xu^v}7M9OpLv1bpsscZ@ijX>Z6RaqQJQH)LkS`PWt5Q5=OoGdo;e9EEdxt$3O@Zt@t|XzFLe^oej@=v8hr-qLhDQILrNrxTcH z*E}B_*cotGr>jUfBxKs_MO4RoTsTyr=r%8h`jd+M9uTi6hqOE|B(r`110 zJdFirM2J&NW8_!R7$`6fB_D#ovz0E8*tihcy1@x1Uj{SsX`9M;We58-`KPE^OJ#&m zr~wk^zNK$T6{#A9mfG*xZADJM=dmNBL&3Ka7||_wmR0uJk*S2o@iumZvv8TGG;6f+V9Q^F9*QaW_Y#0LH4Vpl{>{jbOKq= zp4jy?RVopG&)uVAJ&_?vB__ZdN;uP}BpLxbOgdp4j!+g%g&~ATAuCu5BmG#CUyBE$ z-st))+ALS)^kyLh|EA9xSs0XV*XZV@2`0kW-;--{EpNI86aHJ$GCw)^ewTju@wf2SORWb#D@{ zi=Djc2kEXfgFn~X`OhjpFSsum=5t*)y9H22OCLz#JpVNWLe2DeB z9kQzPs1?q;GMGNsT^z6=Xeml9E-&gA)ooxo9_483E+^w|3t9MqhTru_mXLJfA)Ewx z77Q*DK|a%e>{WvVKX z?t~R81KD&nXFy4S(#2BHDe8Ds4Ctfz>Ent8Q6!NP8&aCA^M`~@nz z3(ec;vq@&u7>`N1INNE>@WIgzlU;}Xi_#4W)_8-a!KXj*yS+T``GWwLUEk}KW-;t# zLjAbZ?+5`#!prccVlL>*htK)!rl;^yqz%0i@6jbow9HE#(EUxGn!iptQv9QMoA{ixVCgO+6dO8M&WMS5!{! z#e)n;7OGh3eoEFKu-pNT9Kz?m+X$8Cl~87Q?wO@HK_#IFq;lXmFLL+ohr{%4%hgb! zweEdfLA{R$VrW{EBB`jI8d&*2UX*@etLxp>BRP9e^=jS3*4aOArSQ7%NJv>%UUCAi zsxb^JNAW^}@2g+n|D*7XPhnTa(Sd-x|9`AA{zIl9EM-vM1Zbtg9XScveY3r*_Ee@FQ12ShA5>fHsFMDCo$2 zxLeRViHI)ZGyf)le6_D*B~%_cYPH^|lW4;5-a$%nog=9E+Cmh3F^VC`K$G-wMB~Vl zB-0!Lf*Z5u!iaOmjmRIUd^=-Y+U%u&%t)>dd*o&FUI&OMQ?5WhtwTMEFg8ZYWVS9Y5VLsz2b6-BEWY?d-A!L)xCi@#5SP^Dpsg#JnRsH%(s4DRc&t~Dzv)#?DJzYg8N zBdo1mfJ<{jG?Qxl0%qdf)M`^$mp?0wh0#S?6t*>)y7l;TK%Ag9ts8q%0yERw`#-AOk&PZU-~VE* zWqOqV_X?USy*m2;ZrfbdQ~tllG41K4bN(-uK8~r+l>QSyhXdL%a|48OQc1nbE^(=9 zwKCN#D5E#G+bCj00wDuiG15Q%89`)G$Yn_}7_=b9DCbTDXLzvQTLTq<`Q~yZjdUu7 z?KbnZzvil*e~i1mKJ0JHDve(L3}1Zt>5`v1-};dJ=O`n}6o=WMT{H1%dC9518(YO# z@T)+5M9!fRkdQu&4Ms+2+mWWqN$v-8LTQX5KEpMCBHVQ4$6;#m$}K#c)W&8dDaj<2mG5( zZ&@RDAOY-&pROudW6QeS1Xb@CVxwplT9~n*;#SUCvLZ@LWR)ORiR21KVmBvWlUt$y zW(^Rjj{b7MM&sn*_%8K(wtTSjELy17>%ndAP>Y3Xkn^U4V{n~6*aK4p0j1(Y^)7Q> zjyXG4;gr>DYRcCdXErI)pUi84bbcOtzya+5XudBRR~4qQ*tY0)*yyPsHd>DDml={& z*EW6n7%VgpQSiihyJBlLZ#s(#h!}J_6QFb28$OecHTKsvG}3)klFGrow;g&wFR_%= zxzH}zreA;!KG|zFDX2F8$Aim(<91#`^#ViO(_#;Av0SaDrj_>RwtJqZ#%G$nvHg+* zyd|q9U;X~c?X7+ij(D>);E1E5o%39W>9*7NqejdV@eO&5 zPlxfvR41>Cb=-N}^=3gEt;SvOHiO^@5XQbhSBJ3zVBWq3Ml&s8s*#v-sR)(tds*o} z`zd%ZV;Z*8bB0=L+U3s+#tD%+sL9b&jJF#>WZ0&ss*;f6GO}3RM42IBZ;fuWWxpwn zVn|q3zA&{O^5@c*o768_Dr(01cgi{pIw`wM7DcdH+eSDiA_qcl2+$%?TFQ$8haoDh zVXb(qDcP;q=a!`Eyt*R0s%a|g%6R&S@;m__qGtylX^bpb7BpgRD$wWeIW>r|2^W1F zNDI=|AqZ*(HsRI$bovgvZXNy$?!9OqE^2+@d@LmusvcSQdm+ma1EkJ85kus{m}72; zq6A4R#^78XKYG0GaV|c8E!JoNnC1!syw48Ut%A*#p?O6iz|S@KBW?bq6LdQS98--H zi>nF>*C-=2?`L9xz-6|_-0M6)LLU?yFRl!1TflzUYB+Vj9O$xZi36hp zEA)8L;(UelU=r0&itnVbTTsNhlOfovF=@e*LiA*Q!0Qb=I6=Iv z^_g)JXi~?iT5H~~1aEObB)OB)pNi#Bh9zu>=kzHp1_@c{TPc*fy58G;V;O2m|Dli9 zx?d-u!OG(KsIxuOi{38%q24o3W*Nv+%?W|8u&(SA;{%K)3KHF@I)V677|-#1d1(bJt7t(>g4WsKh|xudo? ztBST>rhZ3)Wq{qPIh^1YXU?%pjUE1AMohG9L^bp1_}4G1%UWQ07Vyr=$#XwhAKEt} zp8pn~M`Ce7Vpo#`j`Za-ofV6@aCB}!BEeZ(2Kxo8iT(tTU@^x5+g4w#KCBUk+O8XV zPfx#%c0~B%1b+`392eqm^2{bgC&hPEM5J9Bb8b-(Umu?qi@Qw8I!nyU20^0goP4?z zNtL`Ez7U8A*dKVX;vW~plN-TqxD{NT@UoDxz=^5Nv_CQe5C?8~krN7gBv60I?m}FI zu4=FcBAKXvz9wq0>#-D;U^Z`Bd9e?`N-W9?Gm>&i`~Cb8)(!psgudwKef4bc?F}c_ zu1QC8lSe4dn5pxky*CA;la8m&81B1xaf^2DVmP>+BIvA24r@jwZOV>fWTNky z;d3ek7NG%)K%5yb@)>-;@-fSH6Q?9ahbj&2h9C?<2VBs*l05Gkd3bf?-}KG%GDAX# znh#w`p&G+woT*X??~KfJ~Eif?az<$w0*1HXz9>%M|IYo#Z*568wrj_RtS z)b^}c#6#@2@msc9o)`C@PvtABvURt6hIW={TnI&dfwa|US8h)MEYNaVpdE!y!Vf`r}zJ*?ScI(24eB_ zS<>mXbm4)bfW&TA`*oR|5+aZ8*2ddfLl?W!U-l``dm(SP7y@m)NDk%uE z86;KRw-Cc3jI0supqIK>zH{wm<6xAigJ1 z)oA|tO8LWhyhswSTi2PJ#-~V?==ElKF`}p_aQg;yQ#*NnF2Al=#}+Xk8PoQ>;oTn_ zw!4yk8aHvjPD#NSgJ&Rs?+T5W*i`F~VB5kVq?$7o$ZFDPxO-O#hOHlTMT3!piG4fe3 zc8woJNS5HQQa&e1uO%kZ$L8)DhoY)bm+^fjHU=Mt5G>diTh_)sWtfxI?OYp6{7dgi zz(F~`_i%u~ORW1Z0v3EE4G~Vl41$a;z&fRb{+R5x?J{jNGDG;?t=r0^nu&pM!+q^2 zhRGtb<%8u{{IQEdm`QgOPN?$Etr5BckDO%vJD(l;b1~E9qAe&%K6dpR_>3R{bfQ+R z<8s(D1Q_nP;~waHRsNWIqJ32Z5!IQ-SwSbC?{@C>eu#+s6LK-w0FHnV`upJ^;D*+a z3*PXOr0Injlh8f@W-9OGTs;Ia`-{njQd%t5w?YF*u2yw6~ z$72>l)L5vM|A(t{>dq|M+HGvxcEw4>wr$%LJE^>}ZQHhO+ZEe3zwEuw)wx)$jW*l* z17psoKmGDgQ%g&WChoE)88%=kgJaEKw7&=D0@Imy73$j1fN(v5HH*B))$RJ~DszSh ze|QfQMcgK46B^O1qkCj?bMSpnX5R9qC9s71er?+PdLo(hdCUT<;(21g%Wn-#_Vd#9^*!v01CO3MHcV_=~)wF^YZ3s zuu8A=Yf+Dg!Ld^#{$P^x$3+>g8c0z<*5s6uJnLC7$k#p?BPX`i#vC`dsG#J<14iFw z@mHnfS0$c(@+3ex^6K~Yd1)Lsg-^?rVNN$MiU-j4ciwf1JFD`8ZLn12W=<5@lkRxp zbsCM9-V6eKlA9X-Sb&ei)1Q_@?Q0@^jw_Vg5GI?BXfVaw#g@9un(lEg*6^J$O2~3GHa*&Fwxu71^D9VBkZFfc`|O$Cms)_MFPB4kWhJA$Czl zu61QYL9`AI4M3IDn*Q)F1acJr*fQaB<`Yj~JlcgvEVex%LtTluT4XRa@BYdVE;+xj zGf>#Mh3z996MK959>EBIrIp&Tf8aFztwli8&w;UgQ}=?`A=t4&Rcds)6J%>@wUcAj z@Xbq43lS4Sn!fr69+CoX{;@|nCNtl;$`39tpN=)Lcq9pXdtl?Cm@p{DOv z7(x0@{tC(uTwP2ixvmQLg-A#^DHN!`T0AVIsk1 zAg0mGh7<@WhX?b!pq^M#3IQ*;TyZmU+=8&>ir%9Jrm1vZKl+J_&uTh5fd&KZ+PA3a zA4;dX01VS>{S-9f1HFXO(5@30zHE~JVs!{vB41}HTH`9~9m2vjZK>aoNyJ#<%uK+a zm8Vyrn2TLBX}H_M>}5a#i@G;+$*@ftt5922!kM6A#fgu+vO^^XX0w~pY z2mmrFw^tb#E%cb!XNtGU*``jU;N6lVqhzg7f18pzhs!6lM0;Vn<@U|FXyw?l<>b-h zByx*)w;GaGD&(P_QUaiSYxI{w&cuEZw5eysDZ!Q`K-};j<@p z5Qufiz0q;5^)XOA30Jab1}NFvUW3wpARs8@xG%ItBMv9W=C6KzM_1R^Zu1wxzDL(o z^kS0awrqE;1r(SQD?FIXp#UiC7|Mdx6pFOY>juqKGuKKc(YgRi19&XYPX4Kl)hzm`T85el z%p6jeYbcVwdt-Q(i4VBzM^UThKfYn`a76TU6WG1`err?8?d0fGCi_@X^kAe({PEv+V`0?B$(IHmP;QNEAw(o+P_oHwPb|X&zSw zy@2IpoZjW!pcd`PAGnNh{^FFGcYAM*4dbnELAKcggX(FMe%pZLJKE65U!6ZHeo{>h6J)f~9t*eD=J|#0vqvSuI404^- zJmqXM5R7=*MAvL64!hZ2$~18{+eK4#=)%Xu?48XNQ{>)K(vSlg0f5%^1xLDEP=3l? z4fQ_Fo#=Fu1}{@ifRiAWK#=GrGR>ex{LtwcgK4isiHAH82b*u@3+y*w2yxSwIwZ*` zv$i@`i^K3w-r|ks#kRj4rQb~fGVXgGR{k>nK#_F0KEt*S-s3i&ZtZ@yyOYOntU%nR z+_P%G-yd`ohj2$^#{g&Z&xrAs-yCcgR79G&9I`&zp&a2!UcdYnVbu+OapVokNbs!Z zqT#DNAjVcQp)FQb{=%X^iD%ro`0FY@eqB%4LLH54?QOGKC7{KoA%Cbi>duif-k_fS z#mp%@>YiPrK^*v_c3p{@;T9BcgUR`eG?nyLI$XP{tRu)o)s~GeKoH0 zZyo7Egn!4R@`5$ux@?$vyRy>4Hkupe@l+jWQ>Of0d zWzDIwLHUjG`XG5riRB2M@7=jQN!QHKZv!6R#V=&9%bx=yA<-F6%iTVk z-8KN9R~HvK_%xt1qrM^{yXGgbY3oQgngf`fGwB^Wf0tjtuURVfPs3+gGbq{unC~~< zkcz`7w;z_SSRR(D!!_atJQyW@WcAUFx6+&DR0>Q&?-nSg#I%lyXsLkc;N&RA8gtNU zhTl7?;((xI_;b;jjD?77_G(Ptkuynsc>kb%I#_07TfB~EcMKf$plo%uAP^?2 zc$$Y!Th-8d;Mww7Py!e}aq%(#9W(Ff<)E{aA!3+@8w2~*%$}242f!Thvc5BGh9!&S z72t1%CNL~QMsx!&+3?yp(_=&5m@5KXkI4{?a>9Ik#ouhjPHsH`|@F}V+p=g0XWPZ!=d-qg_3xG*Gk$>e~v zlDpj}{d5XPr?v;YR*$}}-bcTlzFrpLBVg!TH=EbvE->pU3HIO(eQEy%CBz$XRf?3s z2+(i!DrN>8;{B^;yyQXpft={8&?n5F@285w5AoXqEjkY5>&YIeSrc93pkZ#&?}~t} zz0ButZbt~5J&8hZxdARKNRn{@lBIjiuUkP04!@@1eS~(eBv8af?-~khCG_Ac0su~^ z1&**=44PwZ@bedFf|L;71#Nj%so((#F^=CR@BCi_!Ll(<4YQ}ut&nM$@9PdiDl0iR z#H#Jz701pFlIK&@T)HBK@5WYKx;g|O!rk?Qf>l?wn|Z5$f$U7CN+M)3YqTFvNsKQe zB33iEjO$$CsrhtGu(~eS(GwsB(*WZVG$u&`XPeW`?fV{%XEz;$*e*SH{cp*UB*H&I z^QwzIp>t}m^a#J}WgIX&J%|&k7sn~pmBwqqIPvYwqhy@gsBs;k!saWgUdaek#8gmmD3~ad^e1eIyO2E1sgsvKN zK=~-ikEymIca-K1oB)=l@@+%+wNrk<+#&8=x?F(ejka6OH%U&wpfG=HHIXku2FtxS zrIIr9R|Al@R+edprHX2UC~MG(9h)5_w3fTTGc{bw&o9#w3Vya*9ZWTQ<0PbI|yN`xN+JCAO=a8R1XIdq-@ z5glqDVS}sRfROAFU0vV)iQEx^e&~!HDU&(Rw0sME*eH1uq6EQ6BtUXRUXG+r2_`cO z0=UN^py0&}VF-!FQGA||+`P6Tn#_%Lyh(=>vR-L%Zpp4IK}OspV=5LUdbZrC8otcD zluJ!j)l+9ngnCh6T0RHAF2e1Y|G9eg^haT>f3m0~L3TRpBD$cL4^u)Qs|a%pUnu@W zj9CtGx`Q8;=6pht2f#*;8^eJQEe&LN(^bGeK*mJon25Eq zA=D8IL5Z#$M~Ovndk2eYLMg4D-kBFXXoVJ02$dpMQ2yh*-=G*O&KwtujXyy#&r`W3 zA#~)bFdR{NQ^y#;Rn~VTtODMc2*r^%i9_!epq2s?L`!im34pgV6rd)Kjm1p4nL|1v zauUK?3lu8$Il&wcRC1b|rVMgqBt?~YIFFm6GO?2M8>5Ud6yLp5x^ro&E!YYoSc>mA zFGyueZYBi z1wurnA9E9{2C$YaL@}8tP1R7erK{3X94pCMng2UzqLeyG&}9lDM^2d0)xM1t4Fulx zwU4|#wvyTeVWR%`;jJ(1qqes4U3*(OZ;*^0wFWn3JT}PC@C2c=!z&d@b00`0U$x3^f_E6hMGTw2==Xg1(ovg z^mm)t79TUa*L83Xk>u1r0}Nn@PtLE=a(My!y%d&$mJKdGysckZ3i`@9O!mjQTJy z*m5)GeNsWU!S0*)H8R%~)?9|;lHqpb1Y~UDx)f zWOYv((w^mr88yuxgHcct31UQt)D2=&%DSXDG61@y6nq3N52})00cVeI5OlK-CWg2Q zPKn`8OUC9YDLq-`u_hTT`GNe6IIYccX_@W$dmlL6vk9$h&vr&P4h$wzsiif-+R%Pl z?ShFsxR}{5_WVKtWvQ6nb0^U9i} z4S>}*;m_JC^$d9{u!tFtxjz`eisjpu$%~ZYZu+^k^9H!M?}ca|DE-GN8$VLvhNp6< zD1S0dh(?)&%C>k78)irq0a2O@Aqj3JV75-SG&hhDmGXB)m zhYbtoe4@h#ds^j=jH2}>zU3sED6EoWPtn^tN@UVkn#AXA>RKHp?&U;=TFoKxHvqzt z#3pGwImO~bv#KGg0m^`+q)BNq0T62H`;`(*$_x|R+E)u|oSS%z&c|}LI11sUsz6y0 zNdt0n?}w*9b`6oT4N__ajq`90iL{mdCBOh6-01!3m|%Fa`2ULtXAI4L-Umn z4DwVKa?+WjdO`Jds)f<=Nu`#Uvw(OC$F%3KxsF^Q9zM~%yjfMhNGYWnmGa#1#Z%vs zhpU2wh6UL0qo|2aMp!J3!=1LqIF? zX*d(!)kP00&p#;YUo*|_S0NWnBYQPQ0FIE3a3?ni`6VGmr=|r@mmB!i)V5O*9i z67a2g#=QK$wCvfgGY17lpT`pNC7Y3%-14` zA5{7L&Bi@1%TDB}uKG*G5A#Oa=u$X^cr8E+V-{5$qsl7#lUO#iv57DAaq38dhffiF z4eYL{-h?DFN68Nxa}T#jsC#3=)|1FJUFo6;Wsa33)`lLX46rOv7|+Z!TAI0^Dopm| zNIo+}@Ara>_=b#0qu}~LF(xIuw_sX}UvJZFBx&Wa&^9rcoD1%NGB0JpY6ywaKT);@ z6Bs*QyntrE%a0?N0uw?1Cjg}01tV0rT|~U%d(3-y-_;L)eu+xUJm)2hw85b9J39Dm zRI3$xmvwvq3;@*{U1|DDuT7}rBjFDg?U=f9Qmuvx+Cu4W?B>yW%MQ$}(zK+>?&_Z> zSb0Jf!)$wsiMYKoQfs0;Xai}hZ?t=7f{DV|~EuhONgQWtl8K1X(IJ9~_dun3s z=&2GlYI~f$zIWr5^WJ1>RnS@*ktC{=l!#juo>BG)U_INPaUr`B(1dta=iVG;eRjG9 zk(1cX@Ntz$@)nXjA-o@=p}zApK&d@IQ*<1}>ug)`%Mv@ZJe`rDzB>=Hfd^tFlffn1 z-7WkG3b5PU&#qc4)<{knx2_%d?^?^KOd3bc5GXq2o?1J6>r*-C)x~7hN<2i()fq`d zJh;Tggi2LB_}$qA2!<~Y__!$E=4cKH(7y=~-xPDZJD-zt)ePx5DjNZ)Djjy7if}c4 zOI@qgL4VH5|7D-eXr5)$U2;GYzeWR@8ga@)12`N-v%Ts~e*Df-7niM2E=X>o25KXU z9cp*$Ohaxom#)YV&(qpeL58gAfDJ_4ruxYBe)I*7c7uEeMmI=k(2`y!~*(UlZyI3?n3h*~Y zrJ({NO2y;7un3emil^L1SlVV`f+Qgnw3?kq1?3H8*E08!vLW>FlT~%NP$otdTY7{- zaP(!~%^k<$a*WnQo-#?{P^R5iC&}rElOnWzi)QEu_9tfF#Km`sID&|nk|Tzt<@DvM zQ@+N0A?&we#Iyn#S@ z7|z==&>raG=g;2XUMt4uggK`Ae$>#<1Gtx9fW=x*-3H+Tf(^gx~zmX z{$U|ya())>u0F4Ea;pZ;2Vd>2N_BNE0HYH?(%)`DUk;K&(9%i&z@>r42AJH-8hZCu zEWJLl-pQ*9xTY;!0lH}d19j&|tp0ve}vSCD#gLd$AOfpXw@4F0U)GSMxSvoaFs<7JrdRUtn~D(UR~ z6ERTKkIkJW%oNTf2e#s#9AN5_Ppkm7`?FpBwz+V@*dDj~OffcWtKZz^1umA(=YiN8k1a}oet7sg&?qKa|$10UuD$wJHc7G_F_ z+}l4VN{AIr#qf1(7eE0y#$$7psG^P$tWMTdz3+>8m4Le==p{J1 zLsr7u0T1B^1$22UQfpd(*1wqP(A+r$d6rEJ04x-Xw=UA%|kUkQ7RW)P5<_7nT8CA#A z20lVtO3vdzA%m=CzzR|navwx#FFT#mc9hiHDvw%!IiIsz9xWiAuX^ybuH)DXJV|@Q=Ec%OF*!3QssNI>of0j;IK{ zkd%d-L~c7&SphsK79KxUL{aZwzN`#M>8=XLL0fl)LknD_(>W5ivYd0`qkXlyd4m9BkHJ#Ip7(@wHUvPg9O)4>B8>;!M} zMm{mIZ%nKu+DN55?-}8m0v?L;qQ@*L@8p!$Xkn#4x4O|#mXPox0{&H~HrLOvmZ8&s|jiq}0fa*GR0OM~#Jg>y&AhvADw2ZOhYG}RNMr-C8K)`<^ zTyS6YmJyJrojgVptQvRg83{-@$Y~H$#05u9Ylp)i7RXB9u~O)OF9nH0`807`cT zO*t|yFeQcMJLklH``Q-JZ5gq#0ihFgv04#0=ET`qM{mtDT%%OdZiW2{hmn&^(Ij>{ zRzmbnx@CrI1klHVwW7Z@ZY9BQKwizOUE831UIa0`-Bd(2c0K}}L%|T#I zMmmxx4DuynXc8cO@}}Yo+yL{-=h;L+IvIg`us%Z8Vp~JMc`dZ?nVB@as_apb8|O`H zkkUr;fTEeR+l}aCX2cB9sWU(~n|3g>%LAiLhQ)t4qX4jR371F#ztwPMiZPmyLZ6x? zSfP42E#L_$*F_>j8(Kc%pZyQhv_=)nBU#9R?F2=s7mcMQ!j3z3jP03-hQb$EC>??x zFK0fbxQ(%zo_;htnJPF4L$$m*yGWm*6{{8-n^GTJ2aeXj%Ms;?ogSjwojdnU8m;AJ zUsd#ckMsaD73tp6dE&Iz_nb_?7yNzIqrX8h7#kWRmiY3YOtF==bNA`@|~`CsJHId zTlL>wp4~MIGA&p32T}>MYESanBJf^JlES=DaM8xX*+LLqbn=}T_aW~<`g(FdA5&XQ zUih6y=K*BQ7f{7kKx0`cS_c{I!g2h`^}LB7!ZU3~{N@IB9+|51ssa`nXK6PR0h#wy zX4b*u8`Zs7^s6_A9c80Of%sfaM$3Fy!Zg|MhRY`**9iSB$KdBg!&p2+Tyu5s@A#u+ zf}(GGTd%=3a`7~!rvoD^=u9;j_8|3+s*>{7M3Xy!!w|L)fHI0Io}9Qx&o*&L1-G{* zhdZ2#fZD7{8upUmt=&oULt*1Onqfa-EvE99bAA_HS1;@YVc@-6x;;T&mGBB*XwHod zYjyNBo~aSkm~x`4H&%Bp2TXpT8WuQan0y+(wM9im?#6uyF3kAY=*RWafmC*9ALy-- z`S)5th;cX@0RQw%%$oG8l{?+Wc^6w#5Y5rwAkqtcZKr-V>n<9u$$5=29ONpv9;z=e z=0;|fQ2pP9ZT|waGt`WK#%G`hNbH=*C1U;~0p|Wd6=F^ijN1H>p4S#`*zWk~|GFcX zaaWe*nB#|ajTtP=rN!`z!P=WRWF}*(S$fxGfC0EW-jz~bqlbLXsKoqr_ptZD$GO8$ z<}AR@feq~$R5WQw@2VdR?%h!w^YsRO2Rm{6KwpXP$BWQ4F8TW z)&mOh40jeyBKUh38o0UWppi`9p7`}_F5Pojbg8>(88lXwOYFRS=K}oq zeyu6Adg<|uuIle;@%$Se`LMA|h~VT3>+VSXcA_`K<{PUW%9rI7L++D;9EB4G% zRB298=IQ9Gq=}%CyUoGQfm91|xd0$@v%?p^EPRK?KkG>_Al#|o`KDD9XP`9tWW6pZ zV?WOpLjLr%o&He#3E8!!lwAnkCF!~u`Mx)Cy{^2L;4)K5)$PDHBdjlB#TQWPFp~9( z5L*4(Y}cL@lNMAUB10_W^MjQAx!!hSCvrx%rdN+Bwx+|NETU024iL=Skq7khrGpjK zbT~&$ImWq221Va!9uATJ5C_FDLE{x;g3^yIk0hGxOpQJ(@J!8TZ%$AIC@Oq z@LfA+;g?=@f&kyL*J@tx6#&5(Y*UDhrOygJEi(TSh!^dYVEa6fJb`mCR%5OU^117( zPYC|30s+1RLZ(V3VRQ{&gY%Ij!XllqxZY~KW6Q5d?hd)4!j2_&M~?=n-Mrm#zo&5F zKXH#k3z%mS*OQ<49w6_#HrYbOcXw$O-KFjaQc?KV{{(omU7itd+yKWGC^qWFCPhx! z?&s1@>K&le#G|fxJGmLt#xO4Dhj8HzPAh~;mp>r;RsO(2SlZO4sR`PFz$(WRHLB6y zdV1x5_*=@<>xAWf!D40T*K7v@?eKbkW?x#wz-Ydgp#=7~JtL&Qo`39NsUh)T1c{eZ zy0ZR^Fz0{dGQbDBlL1WO?!;@`)U%Qr*QT-{{D@CXN9(Hl#XB{YjPseS+fTsz16~oN zV`l_MmSq%}Gs0z`2%G4-a)1414_%YfzRTP`j^cH@eRR13yRy2>m&-TC7v>OuPoItp z*LWUlV(#S;s#(J84F@@#skb5x_NvoCGmc=x`KFv=_Q^g$%L0}|?^VgI23-S09(`ht z%4)Gw7v;^FdL9cr`UlU17k-0$31ic|;^RMW<7aVx^1tw$;3L2bSdaW{IS z2^>AZXV9+>)(7CjHM20#$=#UIIRs5DtW>(WxOliMzl&c-x@h7uz~in0Ph`bVApe`z zzc_X)F{iwEoI73XsLWAuVqaAd5?wWyvE!3XP2J_qwGZk6wy}2l*m52uUy2LNG&l4;wMI3IF{YrN z?nQkNlgv~u#{bWk6-TpxUZh&E{@j5Emx4yf>^u%zTfbF zL;feDik(=u4aH0Y1oRdD|7)S-SapHH{)@9Hap=+#{CDzG)18F=@1$U$>nHl(X|YH* z;D2XYHM+vT{(F|Yu1oO0v%Y;@u>Y|$qfmMs|Kn+bk@OyU{_|gokE|XGpejYy?w=S^ z@bxD;*o;zb!}hthRhw)?D>P0K`1%oJ2e)-YUa3G~6qet&mv}vDYI6a@1BuXqy<1M2 zhk3BRRVNO8N(DCC<+&yf}oP~^CI>e z-G@e%w`{?&&LVibtj8(@;A89(_DQY{4E$QEy8QFZ74WRMZc{~y4llMi?_1A&k0T3^ ztAOR&q*cv9v++t_ggx`>%=KVtJlBOh3xO%`_$*JZF3Spk%UFw<@E%a}Htvmh6g*pb zrXZwnvD8Z6_Rjw@O(FE(a{7u`Y3*jym9K~bJws(LV`*~!p4r+0Y{_-!nUd@`(L%#< z#ZM2$Hn7K5HY((bJW!x3K8bd4Q>&PtI<{p%MUyF+1s;e=Y!Pvluz>ASjQ~-n=!8ed z`=g~3njtgo7)m&@NAV;>h_N!}$7zlN9rzFJG(@kNf>V=a=s?Fu{)RBEdt$^<&DuXR z4*L6B+qDr_7C)>QFaR|bGn?6K5H*rtx{e=QT=DAId_lRi z_S*$i-#oDG57(KS@fj&o)rP;NqKW5APUH|qWw8O6qoD|KmA}xKW>TRGb%C=EfE*O)ZD5BMGRkd(lV>eWE#?J>u_K z96yTuS&6f}FmADtwMCGs#TblK(7pshKDlN7>`YTDp23+C2dK-0Osua(y01h{G$`Gu>L%ja_X zTdP4hvhj-^)uCFF6wRC_$-yeLYGI2`>zEjUX#$*yq~)a8^>tWFD&JjHmE=e7*(eRK z*-A?S*IqO;giYh9JQ`Dd+`b?sXoTdC*-;OGb~@j>Pf=m`MTO$ z$Aj5-;!K2V!`C|Xo*oWua6|{3=Jq=4->v&|SHzZAP<43Mu{Wu%#0M@$i7o+<<00~fxpcz02Yp3mJ_cD$MaRKqZ z{)dQIH6d3>04ZVr{2nh8WvXEJgE$(4=Ob{F#<*b}(6V`icVI@mp4ZRA*Ro)AMj-UiR5;qje zkA-_ZrX@)T1PtL_mhn{?e>VT(c__&l^%_ql)Jqskoe9Ugwe#=&uKaQ5a23}o@8;PV z<1Bp3d<>eiu2Ft-d{CacuDm$&?D*U8)pFOi6;K(H0g6Gt?8fM#P`mx!{xxZj=seT# zG@i#MFlAk$SiY;9;K+i>2WRTPBJ|T8un+;w8e|wI!CqU zrChF#@iPUg2u>%)7W^XeXF+6)#g!XdA`3?Jt(;3G&rI#}jaF9T^*odVNj`y1sG(${ql*Gtrj%D&^SKLb^jjenEJfQh0idS_`s}XGj64b;@%0b#HHAb*C44?U zc64wbvzVqZeFqKh?$z-X_PK99mv&^kvrorH`RAaFb0s(&H@G#NL2+X143~9ow7_y_ zO?3@%s`u%4!-`YyQ|iDvP}m2Yct+VX4~EEROWczA;p+YLW=ny1N`rQTmB}TPy545j z03tWCVNs&ix@wyfjmU!;nuwb59Ep;OCzd6U;DPMHIVE{CAn%PnSyqb9+wyjMV=%!c z(|)78uLv(ozHXSupNAk5%?@=)a&U*ddhH&*Q6tRi?fBG@m@;)#*0_%xC z{`K}qnp4pEihLl+uDbUplg=|+muZVuIZU^>_@_1U$SO72el;j5slMf4QSS4*kUO&rNhAYxwmQk`rOB$_v|-c9~EDrs;mO4+24u05$CWN?Oc zbweY+evdjfXXrTop7zuE&{L8L#1*5nIu8VvM|RoS3~ zxhXyG6^$iS6v8^B5c8l7__#HB{r>b>wL48He)@ZH>$_gp2H;i_8`a3w1vqG{J!*8uHpx3P@b;V|8lg|4&8!SG^ha-t@oB77yX|-w9UE4(B@AA! zsDdF`c)}Fk&|DV$=lZk=q^`)5D0D-KcX9#H&F4Etm&5^)@fIDOuTAr`gh=eVH^%^# zrmDS;I6?c|fD~|Ap#Fpc=){fS^pbM7pJ(`IL@W{FjJ#3AHt}l?(`kemfdvLXl!0`3 z1(LRJH_&T0fY_3-Z$qBq;^1t>0>xAE8g|g3bxD#+Y;WnwtLV_3Ult3Wb3@y;l@qC+ z$mUsFe76es<+Qs9u0u$UleBGRgH`{ug^{~BCYnQLbucf-B*GpA02Vs-8`w4DcfckE z&V}PA_#XV-_Auiu2ExwAuX*}?>Amk1M;N7xIH*Rye5e?Isk%2e)-dHXm|oXA)Ol_n zuQ$6)fj_%MH*P`!fkqghkRH+)pxKdWji$M%-2MDgskojb2+&u|ga7bH`u@No9Pfa0 z&Mk_JJ{%3tti1y(0&Y3J-|PUw4s2T@I_=2~5}G)SA9JR~a*ClVg5m+LKe;#vc5DV|ezgDB{0_$@;enXLY0>THR!Q&6E0{1Cr3g$R+ zX=8}%-2H3sa?T3Kj7lDBrM_Q7TX#0(a)L;?y`lz)r@Fcw+x!Z8*8ct8UufpzJ7rmD zUP24pd-beUF$76!5dEh;aWAr`n>|p?D+o65$yqOK%r0kf(TNUN$|9k2&?Z}#5>Ua@r0x3 zG&0LKKstdW<-k!Lf8$CIL-i{uj*s;pN?+jjDmHW-dPjO9d9fwn;My3)`1^=-i=O!h zwpE&_0?_7D^j~Vcpws?3GWeE44~X88IgopC5 zLB@QTKQkWM2xElAJ39y9>#wH)Yu}R$mDb*Kgx{bJnq8krRSKS?8?6*RqKe+YeGA^g zH*=w*Lb2cN>|vJHQyIyIG$@3D_lsn#kkS{8N*EdNG@)t)#;DYXJ5+-&B3KWrv7U2!a z#&jV^g}28HaF<5Vs-ls5*4D?XD7CDc4Iq~BbLMTTOCLi~i{SJj^yp_be=f{}BW5-X zkwQ2MnuI5Ziehmo{mAvunz!<|zrB5`mCO?CH3v@P&!1LBi_tmi6)5>I2PXB1g^p93 z6-LV_ib*fhcS&(fLP=!S3@CMfgOKiku|zWju%^=tQivg+3R;ILddJU*87CjbiD*v9v&3F^xhHQdUlaXse0cjsv2dJsXnH}OsWqXEO|&_fik zO(qVjytoLx{+kZom&v_s(AIKofZ5t7m?{eE3IaU(1pYlw&lEI0V6_$iudu9OAr2#yV>Tfvx7g z+lb8!(DMGBKNWkrG7o~@q*(@pR5F8(EcHrrp(i6hthjf|V@1?e)jQd3wMkI#P^HEgp!Oqax&8BUHnJg4iEKTMtD zb={&jcM9|B#_HG1yn;;XCY%yRuufb=fIc z;+h7qHMeD_8QYB=je818c`~7;jj$Gukz2++B^QnwD&oA0t;O|I@P=fqQ$*Gbl0ha)U&iMLgGtX(xaSUToktTa8#~ z;67UQipj>0m7Tx=xQ^gO3>opJ2X8Wk*#50s{~dC`gMFrW^d_jprIvI3$EVZh(^2a% zv@3l*9sW|+X%##>1(s>%2CI6j2{p#uw_-+&v~MuJY@s4ZX;h2&`Xm&DX|0OC)-NUT zn}+V2B>dEEs>%awAp>_m#BsT{`1O6y&+S!n7*+?r(iFrW(D2)B3jW5l*-VT!n8t~& zZgOj~l(~V^ZE8tKmhHG2drP~8^O?5PU+d2_ueMnGod|>DoE6jJdzJBXa6DOu+mzG7 zIg2>GGtw3%0Vf|Hh4NQFoyo%RyWZ5#mo?1Yb@&Zq*>=qveAxY*rFrGG-SIPEC40FQ zcr4)CmH>otuQ%cE;fhSp+dB*qwwE**dQe>tC?#EA^ID-5eLMQcF|7YgO<&oja-(1o z{ARy)A~5|5?HTiMHj}}`N@O6YJ%+Ffn(P8`U=Wll#(!dMdHq#OY4T=qQlu7~V?x_5 zgg`p&8#(75lnE?d4>jR^gabX`-DDzm_~nQS+yp>5D&HeWSBN%MZ%~jERYtTS+o^q! z?L)>OOzhlQ`)O_?g>LaaDB3}Rtyg5#=&4()(w=}tNfX`Ks?F?uAfR)i648rh)`pteb7Y67{ z#BBqykj!1OIiXPpqH{Puf5Lq5ty;DIb-ohF^m(Qx^tP#KLQ1vv{xFWXN#sc$(foz@DW#CDJfoYMX4FOd*NaHFCYA%j#zOre3GGWb1xY_9O0<6S^qWdkE^ zM2w?kDi~L$%HZ9lz-5SLyf!qHI3Bs3WpwQ9W3(>=6ekgfPD9QXTh7#8dOiCU6lSzf z0J%Nh3v{A}ztel))6<2(Y$2TIfdg=~@t1uv((j@a%O=C*))A!b%gh3zV`)(L%tibKX>&5X zUDl>)(Pj@%O(^je431&XK+S^C-tSCNc$C8Il}@ny-H+KSqoZ6>FFS!lhkkpO0j>lJ zem$CcmV|mEOBqnY)VWHk6-^9LwgxS()2@Q{u8H%OJv{}#H6GaD0uRvgn*vEbII|@% zooApmfZv)0Yp8?Ih@;4QcIYr%#k)A8=dB^qVvT5kDYd#1fBe9zOieP~I;ww!zP8zL9zgWwKsA@~j>I^M|s%uUA4Wm=W%&QKl?$S>I z?$PW9*5H+xdexgc(g1*Wk@nIepE%%zb^m3?LAYg9nIZWXw)=X#-%G^+wJR`cc1YwM z??Eg9sSTFDW-0ysI{J%sAeLh)fUjt+2OK&oMU~wG-bm$ zhZRZJ2qDesh3dq&TAPOE^l{+9iZcLwMY2r{RfatUmmyFFlLm(ynU+O5J$*n7F`Qu% z|A?qqY3J(7VW+c4t({^*QcGdz14|BPHWI|^)o;e*wr#6p+eQZ+CueNiwr$%sI=1cP>*v1y`ZwOHwPvk3YHY2IS+mBW4|ZZ4 z(Y;&M8M-VmVN(1gB-F}v8}UaL8VT7zs_2^?Ogi-Zx{(eXV&2+a;+o^CDB;|K4i;7j zy|5&sDh;GzCo_*St`9jeMEE?JqShD3X}#Mr3(9cQxh*L`RdN;E;Xx!+{ML{$3v@k| zd58s$+pIM8NEHhYvsik1Mu7*U)_7W0;2SABE6O;~>cd7_fcT)k*z_~;K$QB+oAq>x zP#7@WY+YF_;%)>t{QCnHGZ+6J2D20RQa^WL<6QS)ZoL%M8(M1oFVl<$5N10!rott? zjFR=Ak^wY8g@&u$B}45c3SV7L>x*qsoov)wcIuyH-BGnFe_-cv4}AD7APM2a&nXG{ z4^J*8geG$7$PJ}t1@;~EBFcec<1D_{5qJU|&wptr#5`gq{I%X*;*7~1k)7u?yEJli zh=v#$wpC`Xx8&y~=BB0PrYy$-C{eN2I(`qjdjh`!Yx7fGGcW7dk&~5-r8cI*4Oyq> z)$X9$T}!f%YQaC#YLUc`53L$UPcMl&IHNt1nN%kU14+d>4}HWEp1%d=FJD2D9UA4i zu_I;0=Y9RM`A=Tgm<=tmWXTHyzE(yD74{#agaSpN)E~b|bP0~mG6uxkgctW&|mNFT_>hU7-vmuO~YXW?V(e8^-R zdw;D`!q;7TINS*CyBFjW1o3JmZ=>LRSiEwSwnJ-fbK<8SGup-3AvNec^ceRoRa;M* zU2Yf4o_lcq@M{0!Qggam7=)lnMQM<;VHL#&m=PZs514awIM^z`VbxVg8JPVA!@+C@=l0eQKa&R!X|odI!>exGZg9;2#ePcOk8gO-pR4^dYAqyjv0|7d+!r) z?-Pyp23}zi(#9n~kCyRy8EWv?9m45D*hKKYfN{)P^ zAL~i+B8;#km;t-LWJXEX@_B++ge=APd-_h48S`DQb7Mi#%j~BFNtiN%_>t(f(&yc1 z;?Ym!rep8FQwN*~1^h;l$gx!k{J zHdNP2d_WQ>Q}I{P5qdNX&Wh<9+=rj_e$KDiM?{k+t&<^|d~cQd`Y)tu)51Oo>8y37 z`}NxrdB6Q9WX9(2(R@0F5rap$MLy2Sk6(?qIJz9$yV;`8&!}F<$$k30#sR8ixt#CDBe(Ai!D zTlzz}2!eLMGZs0*P&pp9a$7g+27kt60hd>__t!bvLH{V77f)phM!@;T_UOke0II%<5d=lm9qw8ysbyj;!i1m!*uJRos?FZnLUem~6f<2b$X!AdquQ{77tMP}Mg$6vSlM!!~)<@kEO zG++j!QRa=|`eh)`0Y)V>reTBQK(rejsy)==rcG}fqu)%K3ZYg0;P4&g{%|>~KixGv ziJ=+r=2GU*YS^=c=zQS0UGml?L5b_#d@BBeL_KDypJDoMWh6=Xn2aGQk>ochwQ-R4l={*jJ+a6xB=R9F4(OEvXDR&X#Ev0w@*j}CKZC0IU|W}mzE9l#diMZHRcn}U`{wrsZ7CsrN6T6(t(RG zr<@O?ElfSL!yseITj&;Txjj)pH1a*~FigZwN=$+og(~aqF{#|nr*NYw8csQr;)QoN z#Jybc5vR%L0jNWh6b4$b=|LnESPDQK6LaBz^&1nrI0!Uv(fWCNCkh>e9E^J469`kO z*F1`z;t+)4F+^RQ40@<@UZ7rFr;ZQHLkex440hVPZ45EICZ{C$)#im`^ zbWC3`XKHUs!ixqwb4s7$kx)@2R&-oDh#)?H1=DkyuIc;1#x;!{b?$w36|@=#SCJdg z^7WYi2}nQn{v`Ey{`csS&0^?`ld9;b(?<8KPGO_NzH(VL7IXHz=%gwQL0nr_G06-; zZtiGaS5Z1yU@vQB?rG`jvSD1?14OOZsyp`qMe_vg(Je$p(Ba`S7{XnQA3*#hmZ4>Msu` zn^;Q4F|bVjZ5!VHl?(4O@q(+8^(yH{1Lo-!F<1C-DOZH{4XFcS6_eOdu`#xcBi$S` z#4W1S)gaKCbQ>Fz;gG4Lb?#AX;?$S!_MI{B41QD~oi8i){7|}wD)D=pve(aJRC{#* zsfZ`LXdxOxe=<|IkN`$(=tm4f745H0_qx`8S@UrbsH^bWUfXLk}hl zAxeC~zPJKO-3w%3E^Ax-{z-kAu{6O0Rc4 zMs8|@G|ic3I5g}j5wz_AhXvAWarZ9-!QZ^`uh3}+G%$SMY}@_I<8AHp0OD#vq9Rr- z*lXE+;a)`klnD#j)%{2r8gpD)KvF;qmg=E@mLR76Qp5X3OV}_}rnUKtBLL+OO zx!U8^-}0D%?}W*5o|Mf>K8k0|==)VTOCtWvZu>o&_@GqeEl2X4hz~D)+_t=YHo0lq zHCAqV+jwjCkoEq2pZ$FQk2i$pN_cZk00h*f{{Pa3DD3sg|FhSXchuMUj|5cZssHky zA8tvY{yz8rC_<6l`j!9r=5i0}*R%ewcJ-`J1oOWyBw&Nz)c>Oh1=1KWrPhkGA_9uM zA4;I=#2e^cyXhnB5k;LWE0gI(6CV8getf9ck~kkouXScWBzQci(7{sB83z0i!PyO$5^=Ue5*{=Sw${q zd1J?GCUJRbny~5x-;`hGdk5>B`bMe+{!xgOYilA!sT=y*ux;IB+?bRv?%zkU6t8)v_0Q z)NO(N;@8k;DHTDYbBfoV1&!9VioQd?x-Jdp$&GKv zQTL7i>da5d44bpJHtk%#K>wP3=#%G16eb2c;de$VkVnz1(VHN9n}`8OsZ(C(EIs52;i2H5f)Q~nCn^8HQXU4^I8pBKEI_T~q2&!u=La|9q&UEb(C^$xQN6qV-Ie@4U(+HE6UDp z8Eui3!yiX%YID1@pbl_`xpVparoN!uQ3yRI_Ii^3`3Bv!Hn@{&-b39juS*JlVR>}L zxk)u6baCMsK-lo*uO)VYQCZuu$+#?S>=8TwT@uG3;NzmgPHV4odL7Ix&`Q0%rKG#_ zP&mB5Vf$;$(IcZz()ce>$G||hE890C;p(~d2k8H3dZBq$o9G~*KtO+?{{L>*|3AJ; z7`*`t;7U)=8MigTXUD+*_8Jsjx=3onspuolMrTH%S^hF2Il_&8c_j`s0yUnsi#5;e z@7CvwxQPH4nXuEl;TV-#dd1K}90*SINWT@(_UogL$$7cbK?Cxv2s!Gqj6`(e2ou(1 z=9}vI%khgN(nOKt+ZpG>Vr-+d!ASJvjPzh8pj@d4@LBChSY~4Y__@LRV=d(xErDiHphs0f5Kbjv>X>tpN$ysxd+Vg4%dR7UC$eVpw<6D}ipz$M;e!uenk zK$aOvBwAvp1Pf=0Dby4T?5B$9edDOpZT_%)#XSZ13S=01m9s!3VsWX^iIdBAaFsvqcwvtYv0}c`{)i8+~(R!Z!4u0-0`~3#G)A`!fgV>$4e_-A$<;*W!j!07dK2CLEfH#J8AP~K@Uy|4IKcq-iV;XH5W)^T;M zbt3Ya>2SPUt?0Y*!=Pb*JSF~APz~JSymIYw`hq|r|7TD&o{(NzrMSiVtE)Kksc5rj zf`{a!wm4@7yV^uUp&QU2=*9@H_VR*XeSYn5W!`;yzRjBbG}s84okrb!#aUpeX^ZdTuB zilEF1u&##mxrAvNm_6eN4a0EYoN2?~4!|tkhQ%C6;1TM#*bq=iDvjX&S*FXoBF#TE zt+07?BEX**J#t`ktM_nQNjxJ-MF@NqP^ny4KLa z6M7ziS#q0*R$6lRqU3aftM)n9sOKHp#g)0-gsVF>{3@;Y)sjd|b-bLm+YyT^F0rHb zT9;eWUKu{2%F`P#qDw>ura9DSZ7FgpoakfLa{(}rzFj>xpJn$X{o)fCQ1esP5ywhO zJ}p^qp9ajZDZjU&TlucAq1FFkRCCVnDMamQ@ zdH`JN2E>digCJu{GzvA@rcrtee)KZZft48u(PhU@7lDgFP?6UzjD~77L)@zH2M4NL z8#zzZ1w-tI7YcN)W|_ovb}+_=iFC-udbPcS;5sa@7LK&j74Yruwe(`Ds%_z>0`e_! zt{}#jji-*RSFgcYo^$W|=>aK_J(g}n{D23?Ss>d^`oEKD7&JqC8N<|I@&}egi9vLR zWC!?>pBzR^L`8wrVdu}$Arn)!#L<<-dxmYcR>N=fV`~WD;j%?`Y4H06Ib`_+a25bdRQOXfU+Y^<^AfHr}GWY>BEUqVlzl2cY&mMk!H zBV@Kl-!zX>-%H_S6ru9Vmd;SqPwD;T@Z%rF^zNFwKmGB3BhRhp5o-2Ms{@=L{@@YF z8F=ffX-nXrjaTloR9r>TwX1|jK0Ky_F=8EB;XN(J^^=vf6Bai zpIN1yaq?Y*Tb9&-KDD6gP8HUr_-r{IzKId21o~$C3XUTd%(BQX_>pzm7ck=VC6Yv*4vFRkdQ&79;!)2B} zpH%~vcP%0MRREKKhNvv^c+N4{mz+hh;({mUMD~6jtz{1VEOR>a>gbd|`K?lL7dV-1 zDZ{@2IxF_i_QXfm<$nT$)`FTLgw}6pIpTV&h2?EiJaOT>>ivU;=Zp5UU4Lb)zSmwi zry7$qJTgwJHcC3dqcp#PC z(iGQ{vuwN-Aa394YSXPDFAZz^Mc;7cIN3A^RY}8{wPgvoD!Z{O6nzaN!|XpM_MGw% ziN`az!QM7e@rxH$yr2_dgRox#7 z%RMY-)w3+;meQeVXMhZ}%M6rUkBV%_xx;R*GH$1qoJam>V=gg}%UtV`4zKVpt5st- zY=2RX_BE(FVkrEPK7_v?fN|AMKc8LYU#@~y-vm@os{Da9zL;I*TmHX49d(Wa=ct3h z`DLfoxz6i`7>5j|k@9ve|DbXsGtfCM*QNXZF`c{4$bQ%iK# z4!~3VB2thP<>y84cX?uaRaA1pm%z%FrT3=WJWW&lM9D{4sK#<00deI)V0N1PrvjKj z;5Sypib*ydf6=T_ciZ*(Am}m}W#Ged(?Hp5Xui_nXk9H5*D4TA%Q>@DJGaZIKQnXA z_X3maYvcDk&l&9->oF!$7UZ5XG3?X-2B6K!I|)4O@K)SX82c$HP$@WjuB2x};Bgpv90}@|l zAC^hrit)Z8*93Cu5~6yC{JEb$+Hm|6eCKq>?45v!Ic7$?_Dn9~D^^8spE=|LmnLXL zi*{LM=)v()=Zr#NKuGuL^{xYpqOWMBNOPn5fDAZR=^MzRv|wKz)M*rKO8Pu_?*MUOG-qb~%&r-i zTl0N>%eBnmgcgJ5PAiOSTacVN`q_5}lpALpUtvPJg|w18%(LyN1MUSZf%CJGE}2?l zIf?lLk>q2_j0uGZP2>Z+^xq;6`3i4Z)InsjKsjYpC7Ebt2nvgzbQu;%fM1|Q5v8DD zNarnB`E0ma9j#G1tVnS_eM8OoLZ|j{q4-RgO9t=dF9pjK}i~I89DD&%{f+ z5tu+E=!k0|=CH`!V%-(hdyFp?>hC!ks9f_E)DlzlkXbQSqb7@5g2*F?gER8}-X@uQ zTov9OWiehe$u>LPV?l~JKsRfYqD0F#z#J_6J0YZf}6)DH4It-~y zX3FAm{OyYDEM`ZP^ZnMr58&!`X`gg|7?nb4S|UM zo*ztR7?kuczljCiZSGv_yC0%R6G`5~K+!Rv)ek*%8j zT@;^{XyCrvhfJ~#@Hf74bzO0y8}wqISk<|IK*xWudExs4oE`T@p#V7%B%$zv1>nb^ z@QOv{Cu#b{DbZ5)up7KT-qnchzruuW>`5iL$!gtM#y#!#3bN}#fUci97EcP9>U?v_ zS?+?Hj77&O0D>6;nXPf@AB9}7qtu<7V*}^Sm~3qY|Lq_*ElB}fdJv++c-4?_PasvL zEnbsV!4Ja!vWYI~T#P1mhs}sU!A(j}x$!{3YZ*7WG*BOdg(UGodUAm9|Ab)zoQ3Q{b=GyInXnikfMlf9nLh$~YB1$NOy39Ou5J z>0rVEVj5+B3_MeyR6WZ7K78TK)cEx~g-T)Dqhl6ME+-7pkC2!d2M<+VJ?a%d{#Hk3 zs+pdYwW!9*68v_bjm5rw8B&CRdMmWp{Hh4!ga&(^KR6!(LH2p%n$wn$BkcXX>)Tr` zsa#nq+9Y$3bkN$HDi@~CZNvBI{R#}X#pM1QkkJR{F_qhW_;fy-kFf-CujWjqRovH? zk)1oP?G~*>ADW#v-wBsH_ByiV*FkA{%OJK2jnnl!XA}S-0_)FCxtk)odTFT6jL;zt ztsf#adn~534uQ6?$nGFPK!DpPH5g4_#_`j-DH0TqC2`>RD5ZME9PuUQE?OMC-v3GgnDQpM#D}$Ke&m2EOE0FezipmB$<>iAatL` zcHatv26M(?p>Pdh@(=-I5rjo42`n6GiCKjmhLWFN+jA>w#kdK6W~ zPntDCYQcd_ghQ@lVog9kvSIb4&Ic5)1c(xJ!Ppueo;$uouPt$97xTWRm0p16ex zV!wlWn+Pj*gc7;2gic!Vpumt0MrQ4|Oop0(gCFwQNlTB&wmZwqo9*Fj&8*J|lQ`Ym z!kZJJ>Cr%p?4)+oB!&Avs}x-)c4f2wO)CFygdn@F&ZSM=Dbnud!ORAr9uWpeJl_X$ z7Arfm7iBwE{Cs5}rg>Ty$!g^z<6v&cek(@){U@DtxS#fxLAP)yBbGk6Uvx^Wh%G4R zpp!9|`(xisw>@$FP9aDCFH^PS-F^JkCL_yZIQp}o_n~WgV(B->{?`v4%_8 zNvQoe5;fF&@L2!3UYQ)Puvz}EsUiZVbVw_&WO1+@0DwM&3Hd`nshk*%3K2A!MI%Mf!bM?w5?OG z+Q>EaD_EgFy_0XO+Q7b|h$xN1MqY{oeX0=B!A1ZOlgZlpu3$FGH*&(QO2{%V4EYulri-TnmRE1QCWN)H+t{!1G#}= zYAabd;S?|H)-@M!W!NRQ@lDdD27N;)>L_b_`dhb^P~60-#-}4<;41s2G_P~%4@Qd@ zmbwi^$3KgbJ?C?+xZ@IhZAE#9ETHa5(@vn1Dhu>Ap4W8A5*APzh#-acO?K)H+T&WF z)O6+Ge9PLDP(dBuNqt~cQ}y%{$fI&CC;mJFhFu z*|zD+(!HrLWyxHa zE)F(XQP{pWz}edT^E+#pbHEqAB7bf49z0Gm@4ah`*g|q=0#yE?1sp~M>%Y#6)A>5J zw;f41?+U^*-X8FAB`gpc+q9Za>uAda)Twuq^}L^uH*#-)fM~jvIc-*4UkHEx7nx;d z{~VZz1q9Ue@&CXatykg(Apa$A-pd*c(EJZ1Y;`qg`wv!h0vMbL{;#IrYvA~w%fP~j zK@8#lY9_}9>;KgRuMP0H{_CSKr2Y?njG#5t{x1deM9?t$KfuyW+K^G?e|_bVhNu6* znMtvRW+?wxOa06@{3kIOcfyrK>7LbC+BFXbTIsokpkEnlF%1>_6*PFCpF-CVD#Qu8 z9XIs*bceDMSGO(>ga{mw$WJ8yVRfHQDhxPS3 z=@TN?kfWqy>|Mstg>$|u4LgxC~0Fzd3+BbV)JiItUU zx02?jG$?fy(f2Lqxoqy$B~;0lQAVZ z>T5uN^MkcZNF9)HhQsoPg*ybX>NNNFb7!gCh+#{2xh=MVMghf$lWL>b27h$_HOAWq z)Mn2))e1%l zdJZVv|A8iQmy1=-5k`imQkUr)3#3fX$fT%FlL(UGHqQbJtzWXC>s(rqDXeE(9Pktv z0O-)cef8uv!X>Mx(=kz%VQ{np+{JR27lmtDo5|06Rp6Dmz{z-G%FtV-YG_Os&}uCh zUF)!< zX@jN53!&QMn$*VerFzd^&APK%H=E1fRGCEa#;dq%je%Q(X?v-*Xx~2oI^`OU$D6LC z@S$HZXhiKZ!WIMp5&Y-3x)SU%Im%(!X_(k(i4v5g*`YyMha80`o0t_XojLu~cV%Kn z6)LEk0_X?eLzCar^q&%=!@croABvCf^{4cH#S&QYiGLzI_k@Frym!ZKs_~vu3WM-Z z9d6(*;+V~84=IaMt$&~a^5)SBWQ-S@Aa{)wofO!AsuU(;pHT0O^af$tCw@S8<`B_U z#O@2yUpC_dOyAZrl|Mh&+XJ-D>4j=;VLf38;(NS%AB!(WNmjvTagj-(a^_yZWW-&j zEK<~_QXE6+Kqc@qF6`Pmhn;Y*e8Hh%4J04kyCn&7qBPnNYp+NETOCE|4kx=`OvZB= z%vIbolH}!Tx@ScA5nMP%cB~83GK0e}^&eo z?_~^=A(?QQk1oQ|I{3~KX+;*zSGZW0)n3>eBSdnnLZ5h*)@GVsz)yM=y zO(WW)5WrnB|Lhh1eBh?{=ME@bKvh)u9I>sUHf3A7@$xqRQLPg35sW7CM<}4r_zBol zk$7s(5}vSI>t%J)?Zy}I!Z|VHp~ZpK@R4a(SHB%9$?F41)+tTUa`+W_62&qXCkKNz zo$N$MzE=>#0hC8ND+1Fix{P=@MnAD*KECabH%}YRCJBy^45^R!DDz?&=U4J5>=puBj_%JkbO(t~OKHp0fiI z-5W#1ko*}iG2TZHRZ%@s!(wp*%ApXEal?q}#&zlJ*P4d!5 zsQYnR&>)j18Er1f*yX@<+B|Xsn*_kBwI00Xp`bM1vn#88ClBqcW#=)Mpl@*|W=;=M z)S3({CG85&D9Ey^x``_7-rkRhDZ?LJ-bQQHYtjX*_}F>1RGC|0UBKn8hX#W3>9E|7 zxx;>h0I7>|xVvY`X4kjniNfK~M?6tj`2X0vgL1XOm>@#b#N0A{Q`04>k4)9Sj1+`> zhE2CU%|q4Lx{6##1#jpGN4R5xza5F{UGbDUrG0sIPa%Svs|iiqZKs9z+f^kUuNa|u z?N0*0+ODJN%D?d5@#j3Z;jAMbY6x;>37w#m^>xpyFA-o#WTwF+u zh@VwYgILmjL9qoSDf^>$b~H;$f-c@YP#CfF-Y6n|lJMs}Q6WqlU-Jf3e#EqNarpo^ zFb?0YsP<0l2*b50gX3|k9GGch`$^wC5ae0Y<3FVvP8*|mC7vNE-+2%|Og|x1@D&JT`nk&s_)MT^eXemk~?R#=86^ciSL-kFR@vcngdps{US0bY=4xRwSjO+1A z#M)3{d2T;5?6F6YpNG`(?*6HVookGz+TL<&@ApY2EAnot0_XPyh3m-=hfDJ$@Ndz=twCIU=8N0W4S={K$1AM-o(LKI% z&o(s}<6}hGNnuY@A~U*fPE_bS`ddJACoK1245(kK-m$$>Gt4;O5Po_+YJp$gSaR*) zi#X`}>`RF_sz4Gi1{I_NLW%+s5x9@DpM}t4%6_c=*!lH|)8pouD54rvUGl`VRgAna9OvQ?1967 zWmi7*7+8i1zdoj?ZA}$j(|2Xi&(_yd@!vJbB>JQ72X!J6^do;VIcI|u(oJw4zyQJwoEM0uY zsgcLRaM>0=zPf|bohU#?+Hb9HGIsrl|2##)90W%@IIlIOLu<6=dMGt(umZj?K1Qx= zaQOiSY-hIKBd2MoOA7`RiD$KotA(`&KTm-FBN{RK+kDT%0HFX$lK($9@KobULk@tA z8;<14^~(b-O-5q#ZxVl@l|KSwYIcMT&Ecb%D2B#eA!-l z@@?^W{4hRU8*`jJ7+w^0cOOj^=okRHzE)SFakCMJd)L?BoxN;!y^vo>?hah|Ivu;? zzGMZ4p$j#>=kVLT-H*i*L@ZhxI~zND7uPX=s$L)E!%JE3oIv;hLK>_8j zJ9r$M(=#{_FRre!V6m`p*O^$KhdjCXZlykL0ZM{xR_`j;J~;erM;TEBj}%N!ZJS$m zEiWsL?p=+WT84K(W{$rnA#(>$9jAmRLdn%{6z+4lXzo<+MPp_8*mhL}T}TCgb33VS zc9L^G47DHpb-r`njlxwpb(sJVA^2=;n&pLjFR|pY9Pa1AwQ~Yd_RvL$@kPy0E;8qa z&7#@<6LjSMQgE_(UYv3!y*pWocFz<1Yo5cpH_ljYuoez58cpvQXB?K~dF%c%*TJ(v za@~;F(qbv%WMy=s{9M2lR40h-Q|XtW7cJOD!;aXHpwspb&`{d-I9Yb3 z_L+Pr=G_xRMca`^XyH~P&!`)HXXp{`sE&N)Gt_4HpfcD;4qVzb`eTVxg(8vty#Cdr z#HPbF9t|ro*h8Y60m3gp9_t+-hAFW?JSB==m8lL)nuYyzY@5Hb?mFpNFj8M@7^!@w z#Wydulg0R?MRa*&!gc_-OeUa*GO`W9Y$ns7dzTZdZ&aWu4bBibfLM55AaF$1Wu|)E z8tv=2Iy^Wb3QW;#y4Dh~yVhd-d!uk@|1b;rY|~cu%!qsoIs`X7dtQo>3Z?lM()KRIodaG+~rU(2D&D}m@dowz0GkMFI zk)+3{=w_j)Fm>6h2JHA?-Int`5Jv`Jmu~7$Zd5M0Pz>pZMW2W{y_+8}GkGXX;(dHF z2q=W5N76%|X=?3aMrB*x7;Hr7i{hK!(CmH>B<@a+s=j;$+cl8lh&*i4iXQ5Bk+v*loq^;OHe?3Vkvw*kFk%ikzjMF1dLs|AO8riL**M%1Z?OwAti zp&=0K5#-p+cAIpkot9H{DLS%gT3VEv|8=Us2#VT2Rd_HctmO@LF!{QbIa6S&Rzolt zrjSu1S*im;AcL2TIBt?7tCO~wJI;HN%$lq)ZEldR?N$`@RBB2VV}r#LzZj8q>%104 zP+)8t_zmzwTB$QFuVtKNSnvIzr%?PvhQi)KGCUeVLt1PvHm06n zZYM>y{NwSvcTR8M=UenwDMob$k1Ns;TcOC*Jn8#J4;s!T?2F6NT+(}_HWwM@?;}Le z5&)Ea#!E%yUG0ZxV0i$gn@;CL$P>oxiRFZ1)&R6=)nVvl&6Ela+E9xv1~k$)7=)Qo z6W@a@I8hePfXRv~2Ad$_5sV_A!1=zhy5+sy2xmLhQA-O)&e(mb_` zPype|l$KXK(759pXdynS}rjpQ#L=>*ifP>gIL>|rCG3)pT=9k1oG6xl($ z`rA-m{K0d@ZHsD*3kZM0I%q^u$NC_fk(N%Wg!7pUi0f?k3bc0;=D+b5+y`WIMIXo0 zN13s;9U2;?f^LHPZU)`H9-iA@?!I@MXMo9v#@N+Tjb7g__m6X}mtS<`3+u%lB?%f1 z7f)%h;3?s?K?G-YycU-T=|eF2za~OC*9pJn0MntARjU_vK7}?+6MB>QDUotUyX_4YZFW)-Dk@*2#1z38jB)G$$ZC+J1#CMGrsoCvMQx+YN#Aad=#{? zb`ygjZF@WAuJ7_w-$zEDyB~0(Xz3%fgQ{FMr=)JMWIo|SRF@6NIb13HFk^ZcYUqS4r!8&&HRPu7zYVqqMQvk%BgR=E#KPM7Qx z))lr?u_0c!lY%(=ZHs_a2QzwH2c+}cHU^;%ZnVhIpZqu91CtO*C?b%bTm*t2Fn0Do z=t`JeilLvFSZI$CXyW)4ax%{r!IdcRerl7Bj!-e*ksyVAkcf#;aafLriEwSAlU*=7 zA{~l}5GdjB>^GI;+Xg`JK_#o=cfjeKbctgaP+rIhF(RaYWvpM&+2<^?QxU2#;U{r` z7i~OuD-ARs?;tVZ0`uE%)Hzp6$c-VSqdxK$_Wf8VST)Q(e06ZHepgaxe#?o|k}Hr+ zmpR@l!bb!f@b1B1et(G(JT11cCnU9idIsTvc9g37G}7SS!SDdYyQS$Dg4Q`;(J6Fu zMvWE?O)2s39(}l3_#)|~%VDoq&x54sp~kpRe}b@UR!#RQu;ESHbms3H$M9*pd+3&+1qYGkRUENDI` zlHo+(R=<_xS3rTN(E#R4NCfR$t6t97{cgtvX>Ta)U;I&1DzNLAgNXQm_3eC#p6h+Z z51KFODoXzC8!UK?DsQ87$~d}=nvS}T-am{rC-#-@Gl!=04%H?!1d9&U&-UH@)18M< z0=s{$Z$RoiMn?Je%g4RYUK3$f)xA<<;((CB?qzU#LIKtS>Z02yHK&@AEbgg$w$i%- zyQ$waaNAdU9k8MQbc1fRBVwhg!Ma3$e3onv?Qcl(=RJm2x&qX%IjGUW#7vb%pl;o1 z)N5wBx!Dwf!A7n@38%=&CY=jeib6oJR3k7t9fN~N;E|oc zFTlh154;=;ckmG3csr1tVMab#g3MynZfeG{MyZ3ZcnLNz`CCMQWFOr!MR8bNyN09H zNkH7paBm0lOJzsx5MuNpi5EyUABg$=Q>i9Gu;sf_2ZjNK?QJuZMHc%~Tba5H3_lI8 zbMnLnP@9M&)6W8?u5;0GxspJ+S7x&A4uJfF09;Y%s+h7#RSen5Nj8GSfl&z0Us;Q0 z7mC}68MHxlzN=igNV;w4CuF)9ffy6u%(*-4_Kay2_05t1!RDe`2 zY3TqE*7BwdX~iK$d`Lq$ZpZ{s!FgyHa2W_mz{y=*drwHPBePN+c%FZjuS(GL3*j15 z4idALRrG<2-Qd|;v=b~W5IMgaW$Wbq6#M8_XSn^k8*?K5DMeA~gXUkeHz3?m+?G$G zND^VrEr?=mPnJ2BB8H%sBh2@&Ye4ALK#TXzw_hF?KW!OF#A2fd3Ytbd22fDq{|A3S zfWK3FN@91t5(R>fTME0GVQJe1W#K7Ts!Y5wpjfS1El5FZ~t^<_&`5!@l zMBB9em!A2=Qn~bH_ZpE(={ZdaIAA6PdY;nKosbI~v1?2qr#Yq2Qim}C%3C5rIKWjE z6Gst!Hf~HHB}G-dI>;$fl`#Z?S%o1l&M(f^A&4QgfSwr@zobxmXNdu#SIl3Hxlzx z4SDG)Q{_&karh{%mN}V5f(T@)lNm!GaJ`cgm&}J^Nx}0*5x@cVs<_>wV-4e@CsVCIil%|l6RKDmm8*e&2*4V0 zt`ssb3Z4Ovr$QJMiwoo;v92fdgQ+jWxrM?wR<-kWimj}p{`1>&Ahe5|t^`F&l2eT0 zGVyVsqzZA9JxCgFE%vlv)rXP}yC(6|oFkOQ?Xb70-c? zh~C8GO;R}3c#(pu9dcTbd?^!ozBDvO8WoXDq3rpZ`}+Hao)n4n5VVjPSjL7NVAxu{tavhias0-S$_`gX%jm=A$U>TL4vS??BCG=z2hh zoaBShpgs$>irS>MK1L3G$uN6=j3NI+(+Q$42O57IS| z1SLPPQ}$-&$(XE6x>NNV+)!JhRqnRx5%n95Nk!+*BxK?yA+!h>}>+;w(iyDhx&~I>CyS!=} z(DhP_nFd~6EbgSG3_r>HxNeLaPRGt8A7-7$(&Lv+3@{;^sJ=+n)8fNbI97?lC7u^7 z&KAiEo=thsNT?!z5nc5=P$;~K!inG_c4_v7YW>C6-{aN#g_9pnIcu^}>TEg<1bFC< zpkeel=CY~8+<8dU)R67Tx1qEsx_6w3f6N0N-7w}+#DleeRcETT6K}Pi|I&T_>(%ui zFT2gl7cWlOX}=%vJJ*q1o`%2s!SLL>a3-A021VLf5U%o5m55h_$|+{QJ=s)Kn4AlX zb7Qd>m9a>Kb^o_1iK6Wt zu|al)Ka-SyLV>Xok1uOm+9e8qO9Dp!%Ot_C-^Mft%7q5k0-NI!ZdqwA*Apf6CIDp!e9QDUzSN= z!QO+!2UNEA)Zea%B)M6%_Z-l!{3YS=-){WB){Q@Z)61Bp^!$fj_)E6yxBI@n`+ja~ zeY@`e^RN5WIa1$l`@ha@uL50zR$NMYQcQFw{pBw zxHp@BB*TRYd;^!vvp>4q8*r$Imn?7%kV0-wS)3Ihg@j<}O0WPiB$8FNEUw?rAzx=n z@6F9PGj!*)`h6IBXtL4{ofy>3LYCxMM`|&L6>3Zo*BGFW%W@jEiG;l@YSYunNz^TM z#UxgPLIz`rEI~69PtKg-DVoH3hgcLE51kyJp5Cn4<_WN8}6PSwIR%r#d5rhzQd zwBlS=ZQi%LC(xcfX#!`y#6{`0CT2arUaq$3>DIeEnuq|=t3r_sqhL0O{6M94Bu%xN zxeR7EOqyva`=NvN)H3jEyCbBD2A;?*clLRj%$+uMjd&ntg3xHqz?Ajgw)z<*bbbux$v>xaj)-*$N*0ow>9a=aLP38zBG}2q z`rKwo>N=}E!&w{Ixo{r}xj&LyQKs;J#zvcTH{82|vlKJwe4(k`C6eq-F=G*%i& z3RH=Ud&VzE`E`50`=J^6Z)Mo*b0=JzS8iq)u9=%8;4hCIf%Z|Ajua~=FxF;(DXP{4 z$PJrjv8%X}0AFbJT)MgiwWCOfKi}CfcPY*Kp}M{1x3xy3#uN6VfFt_UK;0~VN|sGD zP(urAl)*mP0UC!tsI3JKe{e&K((sqs5^9*My6Mt~OKune47FD0D7hU3Vz!`naL6j6$orsU*PGTy562+E@WWf2Z*1*jKH9d&uJr5FeJRo;JpyL6l+X4OQ zn@C5aHzz3KL3&l$JQ(yI1;D^7RC>IwZQz?oH6!;BSg7rob(2S8ND$E|j|jLwhTL0# z4hf{z0raPD!m~jyq=i(#N_le zUBCHkHX2F)=o{_~kx*X>&drg|rJMtX36QQQ2oG*0nnum5NE~V>kfojF&p_r91?1+r zP?Z&4h(7?j6kIdXeJxIZ7650pLJfUPbD3w&xk3g&34vNAFH#sSR2PIKb^X93dh$?q zpLKMkNI2yKMN8HF2%GFoeHChF`H(pgYqsRCx7g4PxC}yh1Y(v+0vHmnOhKhWRC|1% zK;5fr-8x_}oV-D0)>9nmFie)yxr2hutHr`e&{3o%>R|{(ip8yeKl&Cqr1Yp;Q_xo; z_|VA%8FtSDE}pA3vseOB03ic8Tmi$r_|Eeq#vf$Qwff_A0fh{zZmq-0k{v6nO{qiW z$v6Het&gOliNr5uM=bK2tb22!erQGyQT-9X2u$K-uhkYvBF^&j^F$|8E*27_11eM+ zJC81jPe{IR`lH5w)ngd(iEM=MI`F4Fh#nigEfo(a?y}z2lWo@9k_#sLB^1U4Nc)K5 ziMhPV@xjSUbvIG+XH%Wqu#ulUsJAycJUIW-tPB*?oW;V0%Zps8#d88>HbepltMuf| z^C#aIrwd>PZm+q4IAfL%Gsqod*N0*Y=z+t@nJ6|w%@rws>uq&as$`v5iW6~! z*^iP-LcbGBVaV9ZSWaoK8dh9?#4r>mPsTWDO?HN1v5uh%e-Cn2W_4FPp%SNpbqy*k z1@;07$$-F^wL7axz1;A1qtOt0UwnLC!u zs{@v6%vSief$&vpjyxQtm*Qh+u&B^@e=EVPq1gE@nf}>$3@!8!2K|4giX21?+>r2d=V; z`k9!@F7J47AAhdujJcuGPUnSidM`X6>UI-Rw275e4e&ZMfXbpaav~yGam}wF$U{-L z6on&ysd-h zY~Fq32;cH|U+!Soz4_9YK?=c zz4)&zL3u6Coh~QnaXt)_y0^Z^(`pt;Y|lX6bOIpc4kI&0t2T&KyCp$Sp{jI@b!iD{ zH77u2+gibhTxc+k;~6HSi^C4m(MrVKPQ$aLVZQ)b?6Uuf4}h2qdK<~Wj|3$ZIwpgE zeTr=KAAwjOdx&MDRV37rm97;SVtopW4IEm!_l!;hD2kdWjyxO$u9kuIR?mJm?RNSE zAQ4wFbN$El$FIp=&B92m)p#rfYNbM|o0~m~*Uqa~JHsLS<(HGmWHZ591>JX9g#fJx zXX8pkxM~^2ChDY<1H6(t>G2e#s&Te|{k9X2NB^;?EH9f?AYuluqn=|FsHIMh{lZmt zD3D8QsBYL4Copzp6mAqKzyuwCdQ=uL^o^ic#d+9-H;x=fRT9x`#7GqpjjNpprO-ox zQA_abEN;QT{{3$OXp4Vl2$wKS?`cpeaB3b*i;Bgzs-dR;+(Z~v&EZq_x>xP*mGVY) z?*!p*uBdOWsBf;Q{|Z-B7&%hhaU!GhNhM<_N6nI7_>b~VDeU{tbWN#$WlmNzx4yAd zr$;{TrZPFHfQA&7y;N!_H9M--bHR~HLnL=r{eCRSSq5Zz*>{%NPUy1hkJ^B<4DZ0J zks!l_6z zO;`Gpm^Q>Dh!rxh;p6*%3sfOcDz}D<6>h$G9jbf!D)o`zS)Fkclj3U&EMgw3I-HSk zfr7f6kx&_f{7X9{R|u?*mxKA5J(HV>fhPOh0MBHtaav@j8RVG+;@S0SrhtB*_nGEyW_u3P4b*R;yUE7t3OQmxfTy8bq9S8|go$6g5u-av*VSggHP7N1X%DGDAr&qcwxa3lS5s=_HdmAEaV@c$1*<{1)$De=OswRq zSFe;2xx$i?ytMVZP!XFe;_6&<_g`a9Zrin#tYp|xy!@bZ-+FIA8*ax~E|W`XaK=I| zSHvBuG}ZinRL5t!yf9T?N$}1=M9I8drCNL)ig)X`$ z4oQC^OLn=^T@x|XQzh3ymVbI~n|KxFNCCQl7)kcs0h`}mbgd2F8?^ZW=bK^k&pd4V zf1N(I{Pv%D6%PQt7Wl#e02L{+(+%(p*)v0#o=(Mo4&($NDP?*0dr>zZ-15QazW<;k zL|j$^a>(d30GHUDYv?`ukheK(v-j^lBsK|P&~z-Kg8|tgmb4Men!{eH6@MPDGz1Dz zrdT}pjTjvM!FpR_zI$6t7Dp6Iv0j-oabh_$%tXRoVQtgXslp8c5_CruAw~y-2(l*% zfCzejaqW`cV{piH!~y_J+&u4&S=?Wg_y$s*N03tTvJhm80`frHV*SH+&ash74kV zqDs08A#=<`+OpZoM1q1{_CoBAo|X==dnub)|JQ`sb#@mG(_omLnEG+^GzgqWIfd&6 zwMf@uT;1ZsDYx0G@*tNLDuVo_OO)gpikrbVjED9yB3&X8>__+5#;-4PwlNV8`y8 zH4#Ck`xoE0ow?ueT+4r2Jcor6K3+(VqqJ_UvuZq1$2^64TSkX-X{?_bFn3*L*S^ z3koYYi?Q(er9g-B+()o?drLYz{M5XexVe>t{b=Zq#Jwl62?r zjx%RC zKq3Rgj0rwq^^+9eM}ImwGXlVGAbf907`?K0(dpBZ$H{&Udi-8ilP+%Zdf`mC@;Z7> zmP{h8dg;!Nvfjl_*1b7@iSM-NA)+UST8}6;O*|M;oGf+X%gfIYVzZ~$oM&;YeeUQc zVV1IJRQyq+z!;F7igpx~^hYoYQ6{pKPC z4$_UbKw@kX`_eMW`}uYAZ{Hg~vbHvnZDE!lZu(w6O-N?~}b1{yR z@MR#+YPimmW~PsbVX-GIJp|3r{eLpzTAzjZM6{J>E1uJnY>w#4E4fYweOrNb-o*an5nhNWhK_gVT@~ATvlVJ#v;Pi7^|r`Fo7vUDGsFQZ!z8^_Jokn zFga8bkyOc{l5=;VnAApU{78;4=do zp43KiEY@pqi|3OZ2Pt0zM+nN&M0i4{huG}oOZOJ>&wTYJr=eYo&nU&RO-!LxCo^eT z;#9&N!U5{;)g{&*N@|Gay@x_v@mLjO@D_ZXE6uxRz7UPMFgNjfY%gdv+eIAQoX<}cepH(O#Gd-(`P&t2I)27>n%e(&woEkV(vv_XvoFZJHv6>dn zE;(3pLuZ#1;b}U%`8BEI{2rlz3!dL21Z36uRSqlQ@S^Cc&MTMYW#><>ZkbUywy}gQ zMQdPADm9Ksk8jE=!a}vC5S7mEF$%9WpWWjs0r2vFl`cpf2lp67Tkzl>BM3X>BWE^_ z=%@A=#Z7c{2n^CqvBwDd#fqff?Z8H%0w6G~dPA5u;X-cj0@lO4iCO5Nw*`~tg3bAD zC}XhvKxt}d_*Z+^y06(Z8MukizR9`0i`WJ?V{>lr0!`2@*)7|<^sGd>;j+C;#jIi` zTxr99<&)~B!X?v$NPzB$!FCettwDUp7iw8=G~lNC$B=et-aOm<#VTIryrBbS3FFWsf|!)JGbTr0Uy zIv!nJE1zT&E~k+CjV&N4x24JgR_L>%L}g`vMoht?plW3e=*zUBH$wtB_XU}QTH_eo z^a9d|R7B1;Stk|A*vZt*x?Dsm^vpuUB%qNlFgv(2yaq9;-j=!*dBdIIb@=AnP=j1c zVjEEO84%m(c_NtDmh(5)Cc)9mNL!cSpa!&e> zHIuSf`2d)DmI`Zx3(!G?+|>ei;%yrd=iRZ!hgNyhf+8RXv3dupWi~c|&&}QOb+w>-XyVe6?OXmj+hOVK?ei`C?QF%nQkvzakWqhmb6+1 zpsr=bHYC(Soq^?w$!@oA_Irz5LDsAn1KGs})s;#60d0mMIMNtGd2f0wk&$m-|0d5WiQ zuCib3C_g?LsCYCgsD1Ibm44tPs4pq~K$%p)JqG1a8Sm_3^I>GjaDBXr@=uk7 zt9kk7^4IM((ofQWmOb)+s7@(p11VkYdULwk8%gTwAW2rG$x! zazv-@{H!|Uh|Y$xu{uyTmM&A2E1aN~NOy&ZFF|0)P%@SUIidr9B~BUT2vfrjT@9d) zDghmGCKj?mYIPKK$Sr`7R>mE2K9#trUW^IOI++xRpVj$e1g*kFLvfyRUoEfQ&49o8t~Sx2hw^&MC&w{b>~jDFg86^O6{pl^W%@mY@p(&e1-j{Go5mAh%GeFx_|#kZY` zPxmPr@z zcf+`RznC{{UQjq)>~OG_Sz@<=B@CmuyTm5?i`;eJ>&AB953`N;eR0>FXj5psF57yL z1?^^A;245`N8}DlC`Q9Oo82L01_6(^@69$iA&>?~UFG)( z3qpjBVF+3L%VCm=3=?mF*w=Lix7wx@-ukogP$R8sN~!dVb!CH1YyeJh z?TYz-<8@a$7tgOgo?Tw3w`bj}=WotmU!PxI$RD5m@$u|bdT!2NsjsiDPv2Y@Kk8nb zWgh^{)1^m%2$J-kcS>K*hXd+vf{w?8JST1pv5S5ST9&3FCb_E z0+gVnws`+QeUFkNEAjr7OeI%P9*oAmGlXs+sMnFI$dKcRQkucULp65| zGU_^F#!Yk(-BvI8`wy|a7q503p!Bc>P=b!N7^B(%-01LMh=ct$lHS=Zt6ka@3Hlzu)};aff=g={+4y)KPJbnFv?0B`%-%_{|=+0#*9I!7G4zrOWqO zGf_n$vefiHP2TKd>rf@I2VMsh{7SaXGLb|PufjO@=vg-Li!Pw-(Nk&SmlOei)dp&R zX!3u~oN*|w-*@89MQ)Zoda}*@W>+bs3rUd3?4z)U%zhnZ*GzP%2!_z0;8h8i!-wQ? z&&9tA-2P0eU9X&}e0ug&N%v35%hZW(#S_9{(3&`|*ZSn#Ijx~k+FD9VZOMi(P5Ggq zELB$tijqJ5i5y9|b@F~LtBx>#qNy|ZEEF*&Nj4Qp0O72eY1+q&3q*MMS_6&Y`J}D< z13T3=60o=@58aj?WdPzZHfBK{!0 z8islT)_|pfIQ8m9786KZ5XUr(g4rMvN}^O0bM3O|3rNpYAd{e{VNq&-JXaVyJt+&= z!Q=$2cpJ-cHPTeeT(dd)K8BiFg|jIS@-=tYUGXNumb+D%NZ4yuWqP{xUR5R{fJM1{ z;9-U1VY?HRiAME8d)CKoKl#Z-go-^S!wyZPsuj#DA9ZM=U7?@ee8~3u>km2_TR{`W z8)%C0s~wq08B2gic_XfWz>0A@X&X=3R3O_>vND5o2(GQmU^0zvz{giRC{>#SdU_Gy z*(2u`m5qxwkg5hyNlXM{4zUPN(&{c_slE>v|IAP;VV2qs)Xcu^ZlDGd6cj4~l4Xqz z`)h0sGq-i-I%EIlng6gcYs1V13K>|s1&j};Y+vnbXL4qmuHVdmx!CE0qU^goU9sBZ z=5v2M<^xH1wdKZ0+190Md^qJ!%?)ex&>UoAYQA_^X@rzJcR3T6{g4NDPJhg0Fb$mx z$~9Z$V)QT>i#d4pl1`Lz?=B(w(szbD07{cl?$jdf8}3hd6g)Ox`@nLOj1Wb_;edO* zdEpN^K$e0_CbIH>+rS?;Upjq0M*7-Sr0-5-G|svF6QB+Pn2GvtF24sjpa7YPgR%4I z&!Xlp;{HS0Fw_a7B!k8py<|z9SfUBs6GEahnU3R*r-NA-`4bjzVKxh;7%9;MXxc~8 z6@FmXvg~3)IMotl(Y~P)XIS5Vkl%*_wIx^nh%RxE)Po;?m<&Bkce2z>Qnqw>=9D|1 zd648@jGTe=aeG5LUnGq}^2HRmBxP=t?#LgaTu`ZIjlOC$lgMiA$xMI(Zw1FiD%Gam z3wgwm%6U}f;3s(k=w!%M1mgfuy|#MS17bDR{sE4T-0?3SU3Q>`Za5WS{n{M}wGp_h zNEQ$J)5!^cU@g}5W)oE-OU7_BsiUb}89Bi!SUFT~DZ#;r2MR@mP8Le!%^;2g{ZYwg zk7O;lu(75GVq=D6fJc`oW{uC;uH0b&X}ro+j(L_hvG- zI>MQsj>v8r`sK#G7D(8TaEQzw0(V7AjATK7*vx6DIo}xclS5lLnN8QbYMU!cAkr&+GO+Wp2r$OL6%73hrhs1sU{MH>01MWc$ zBA}`wdCmfU$AeG^6O$=I9>KoCm?i#yoQ}sReJG||Qgm-T+2f`0+7Fx8m#;s*?7p~0 z7^olqNQFq~Pu~RmA=N^X*zTMrt+IC%p3TC{6{m1c0-p9p)0wjyOKGNoYqYg%+w?La zo71-G)k3lu)YG~*4!w*Ba66JKhs17FSx!j&l}&*_-OTl}L=8voQK;ldyhN&h@m6XY z(9A4a1Deu*1Yk3{<_H~|Np(f&Pq&>8dei}EhKh|0`%SIw z0rU_HU%X$3eSn_Tb`xe26nHFu@%WM{3CG9lQxbljx!;lz$~^o_B_q_DZx9bkt&T)D zz@`WX1v}HJ09uu8);!JLZ!-O$atuD6bD%?_ujHSb%sMDUVxM{g@r>6F!a{}Y197zq zap5Y$;^1rb50G*Upg3@n%p*&o{QUM@MJdSRSuO6HR)vKwYLOBI3K7JA;u1<@hjUN> zNK;=?nt)RBT1vK8Yv+1m<9h?HT>@?>?HfbZe^dg#SY=>Esgg@Elu>adp}!zUik}gw zjg(bTbAkYEJ+=QmXO}b6&M%NDN8G-3aZr>*6*}>T6yErTeczz4Yjn% zvJ=`Lqo4AMg>nlu)ODzTXBp8Vp>C>JFb&*6l@d%N)sn?1nj{=N7its7f+PLf(Qt}P zY+_F8L$nZH0`*{(FC|4XCE68QP{e7`rF~TSs+eT*eCg41Of;Ki9zZS3Nt$z=Z zMGRN=!nLsE1ZF8*3rbm_Teiq~2SAiM1s3bgCa`Ckd)i)antSQY#7!fP=QsP@moqMX zHKsZ!l#Oa^7{^;K*2{&sfA0sMoxq=YL;ab`pK-%*hU7z%5D{^}qXvlNs3HEFS`7}H z(0hTRqRE7%nlHP5*W!4+7B^4!UXmFu zr;NrPPoy*{Lr`3&d_5_Lc(Rx85r!IdJ zC5Wy*RsZX<|A`MGpj6UVBRzacM_+~VTDWVkSn}y=AhlS3%+poX$CvORlSf{-d_3H| zzpq;5sS2JxYu?7HCC6eO-tZep3#eRsET;b(R{P3UkIw2s2_#?AS}w56=%gHk{HPSf%Uexwu^{f`0VgeI*Zf*A$P3hGHV1(};PGeQG`8Pzz1l_DaSN>BWg z8C(9NH=OyjWx;28HZG1V>2@ZjVQq-g_#b|J<9-fa0Dc zk750;!g~Gsba!Hsx}SLTfeEI7Q~f?eF~Le)3G*)J#X>oV5sK{hD@IM|U|+SB)w`U- zP3Pur&hHniCCz~UbLIy8!uKv_GCeOzR+M*#^xI^A9@NuNDD~W#NKdK~3d7c!BU4S9 zQ}0H)Q8(c$G|i{nwASVmbsk!pPk9Qf%xA6A9@$-p-4y;miKft^5L90diB`ymQ33`Yav3wg zjb5vOM=ntYApww?{j&^O3DbPy%@h%PI~|JW77Bt4l8Zwg#W=sOkWHteYh-k{>oG@( zKb1*kA2^EZ? zaT)qN)C7DwegrBE0Z1q$5pSD0(^#xajVI;M1=P?rC4TxcQKITr4T@A?$jw11Y zej4}#9?EPRfR|0wnjn`G!}K_E$*@Afr(3Zd$NX(#_Jh!#R8cGeu{b?juV^fmrPfCY zx2lpGQbG;UEz=Hr;nerSOiolduZ#)m^M+yme$sDHCa(i04hiK~He5Gk+zV%af#OtFYLhh$#D|_AvBB6CxRokQ)vS(C2{Xas zl|NRIA5xW@x`AfrHj1X2lDhm*h;f~J#HI8Ba(EOPqh{O4b;#c`Q9 z5BieLPSN4<;lc4PWcbXOjK&00ev(>rP+ zW0`VnKHXKsh33dd#xKI?am8!QxsT%rE6ZrIkc$TEr_^ zeKN^0w>jz>C_uXSeUf!%n7dQ*y*I=njohesx9lIO#S@0}dR5>#AT13{5404;q)YH9-(xyUx zOt+%+M=n=n7p=Oj_e zi27#gs^8RAG%-D!iKF6uCHAf?pXdu4y%usozp&Yhk4Aid5H)`u`>+9yZuVMbfXmX_ zP<|*Nzn-7pDi{PQK&?5+CG{Hxk=cY>CGwbX}yq@vaSar5x$LFeH3uzlFsZ|{p=@x4>kE-m?;zs&_9A?scx$}`^9 z#gnzS#45Sh-iyERC(|fzEbDqQEKQ6)U=tpOGE?f72fW#AA_J;ozhdhRna6vB{n5~5 zk#DCq%0&a_(w)R!@N>0A5DS-YgT@TDwNmBwDh zIF&-y<_%O@mM%hN$i1Qdd=V@6I=e=+JkTFcJU;O~cktQ?!klt4a>gOA2S8!#)DrYO zFr(+;5hSiuGF>e|;Yj@IjtprOV7G5Ty96Wm`bVA7f&N1@a zD>9&Ja~OQgX`JDb740k$?2e8$YV@1CysAxqCsd#yrktHIlsNU?v}2(r6%mL@W-w>l z=GiG@^UOl5zeV_ci}3pv;rB%&{5D{>{My0?zf@%3Uoq$obK+Gs*x~oM&6vBj%f5TC zKYDtwRC78y;3H=M$H8qNHVw5C>$$ENPE|$M)(q4Uo5o;+5vrZXLRrPxtQH+&Avmpn zrclEQ!D;wXR*W;WFq?>08dI+lody|QOoHx}(JdASv z7^Y4j(6#ki{dFzA+gMKqO?hSJ?9ont=b$$Gi}B$=Uxv6*i67iFKg~Q>OyF$lMm%Ub zQ@42UqALnm*hg@0_taeC|&sjyL=m&IYoG(YmrbW@Zq7!6WS$ zlxHJMYHa+gx7B|XLgY5Fy5CBpL^9bNd1ejwJnI~AmTZIAV7r&jpJU=U(c(?kA zhg3oOaU^Sf0Et?qJ9_7N=)_m*Iv<~S^_L3ks&v|+Xpi)?59W_Kojw|W@R5ilbc(P^ zOUXX0jSz)9MI>StNES9iB@!K-B%IHxL`N3Ok94}Qw;>f&S^B2ce`G1Geb(7K**}Ju zf}IdrUS|5w)+q2N8AAt}A=Zlg?8CzfT%w+eM3iT1ax%pvdU4R266F zjU`Nj_->$rZXDMOV~*KB#Gm4=Snp;y>xXLn#i(3w$REV`;@|p_wV%*W8NK(!+$)>A z)3~KEHhG(o1<4I301^~*E%Er0hT^AB*BFW;C;S|?uEn1(#U;9bQA@ER{moEp-%w0s zY~;9OIzyCuxK`6~4VG(LA$XN-$oYoKVdMug)bUFHO&=BIHm%pJTrkMzv1bz|4p9e*9G<;S@3RBYH=Ih@sf@4JiyGglk1b$N;R@{n^YNOE}^W zQ$C1_I#uB}8X0yW)>cH)Pas>tOdf%d^YO z>4z|dSZxYgT(Xu;-KwS`!{6Uue|XP6#HOStLJ8H2E1NQ<1Ij)`*#5e#&?Q#ttb2O) z^8BK^=$Ku!b0HIgfbrteiR-`9e1E1^FEz$B`j02i*WfxSsRy&zmaeK0U0k(;!Q_ai{Gy-*?qc(?-^YG_szsD<@)t z?czogP$IsWc}%cwV+%rd`Auy>vIU=Rxv|zM*^bp6lYuLBN|rLP=b!O#5V%umGx*3K z23)Zdg<^=zXM%CyH*7M}XDVQK7ejCLEQsM7^r-xRAR{W5)&RDvcc% zxNCG-9jbQq3F<6e=>$QTY3l@`wTw!fAdhvG-dN-LLBJU}KU7eqlOQ#qrazsElbF6o z?hZY#@7)K!caxlXEBYR}m$ZDeTn39@IAUJyN@A`qL3yt6kqi`%Pa5 zk8(pszC0xYdYRO^=+q(GCL{(xEul+@0cImTuo6&5=qk57)YjS7Ee|zmHr(=;-uN+7 zAwzko%Nt#+6(6#DH@an?X5!R1c~QX5O%JtnreDKQmuB#YpcO-i-Uei{QK1k%9FQD; zXX|iS3HbezhlAYz89N-L9?NG4Dy;DJz@hpAt`iKMC=RjCgwU)9kF!BaXK9V4KJoz`PiShNxt04%{V z>g++!>oEeIw$AG@3Z`Gfc|ES!ucZ2ac|G2Y&*r$+`1WI4nzb@n(#da5wQld$q+6Gf z9jsZ|+q;`qz}vfDQUh=A+El?ayZTy$+LjqPL8O3+ORy5Gwjy_ep;ddgV!x>BaMj*L z5EH1JvWws%dZtm4lVC5~(78tCPyAd%@}{kG4L1b*y3RFR*V*2=hALM9=bBu9nhK#& zYxsMcoLmIvFp)Ee@(w*+`M^dV6PP-*%893$gL9dn%%Pf-nJSc}lIY=NGbANJ_V0g- zuf-p#=7{)P{aY6(p^)j3yIGGPG846epi*l?BdUD~9SBH-~*82sE>>OccSP}AC3f-7=W zJWIeXgzI$K+=aDP|7b(0K~@kQN&{N53&nm&t2EfkcWaZAf&i7N-u$0`HaP(ZRGG*r zJ$aQ$)-kl9FhR*as}&~68mulsc|J9(OHhu_X4EA(11PxOI!BjI0|u))wuo`dGjFBFFkG zu(OiWrT{w&Df0<5I}16bDQ{=d9V3*brJA7yN=sU8XwkfX;Z-&f2(8)F0;M{w zG_}05Wom&_of6Q>n_Ax0YHER!r1Gq$rj~abHMKzbRaQ(bq`WBL@n2;X(>9bym0n;P zelV>JN}#ePzQH+F^XH_p_y(s-&2zE|V+)jOwS?I(D89i-TZP?UO?)HeUICA<*j&_EjD14x9mI?_hVxIblFQR#N8In#Ug+9$!Z-XA_+& z#hgd3NAGB2V#0p;X31JPYm14WFI~Xd#1odAu+G|Y>reQ9y&rrgSzJu)Re@S#a7)0W zS>Un0?|-glbTM!Xr*|dX7L6{FM>)^7%`PU+5qPDWT}+fMHp??T9+7J;n_Wz7A#&+J!MZZ<(GO9n2BdFG7 zv=9Uua0#SbU#BtF%m3)YBY^|My%=+`;E`yH|Fd@IWbY}=83lxkF`fxq1_wluFZEfw zv$NNhXYc90wY{>pbf>u9bQaaONhETw9!2}O(jJh1mH^hSbuqQM0U$!TACs=>WFnO7 z4JJallVBp0D`Wk>GS%rK5Kykxz8?hsy}Cfjo0xJbK&ONxsHcdS7hYQZ#|(x#tld6o z(^riobz=ji;DN^2Y2bh2gNRKykEH0+lA=#M)~6D3JG&>lyQ~%Y*@qp8xx2eS9#8EP zKmiheiB)t86co{TNT)#okur#DqG1<9OcW>}qFkL*aAwgKt^e3II!?#7ZQHhO{IPA@ zb~^6Z?%1}i&h2wf-MUq`YCp`{FY95i+BN4`V|_z>zHqVP2an_t%pc0*W-xRtV$QPBKU!HZ$G7^I~|PcAOhvcg1#5a>jW@lt|*;N+&&+5OxeTQG;#gDpBd zrS8}4jr0wnr5e{wcC$?=6^#42F*_E8tnh<}%N~J+!kzgog zBMRtvsF1=h({7^3D5*kVPOTwPp|0GujzO)VCQkXQ1ZR(lbRX4?04=osH)<|i6G^jp zB`X~}M4hn`Y=N-4x%=roE|tJPFOOhYibJhh;Pc{Oxr7hY$73WZxfVs11cb9`bcIMc zNQUT#D>XW0V2Fn@ViOvo1V?*5fBcy#B@vM5OOw1N0`dfvYD+UQQcmAh8l6@#MOr>D z5)%TIjE)&XIjaG8THEQjXlU7+WEZDbabl8#$p#M~zvOd0Ll#1m^k`$`5YmlReU`N}cdqv$u_^*Da~xY5w#bfm zw96iR?5<$^5udw>9i+#w=Rl zkDva9UrAh#s+q>in#Nk{xgo{^?ABBNno`G=!EWHaip=OLP(QbO7sq|xRXs+S4M`DP zDa_=u7}{Des&z5KL-uSBIrZo(_z${oM^Z>op1gM0O0Sv5ee9qD6IPBm3f9U0O6Xl}Za-m|U5#FRNO#zA zbupOZq72rI3Wf@ltNj~==Rg(7?D!b+ca_ygbI2*kQI)& z_jV@Tk@9YQ`^*k{Fx_`}q@iRHDzcK37g>C@9_(QJ(eq$y*;Ekz&Rs+B7IMcdQ6Vgf zECJbJ*odVC!bL4gFa?IZlbh1(u9dBmm91uHG%e+QG~3HD7%iHY&~~6$qrz8=j34l$ zjtwq2ZIy@adaJRwIR9lO;rs8inN%8o7DnZ!ruQiKlGpk+csOYA(kU74hz z4cV&|elAY;-lQ)B`i0{{xIxRE<*M`ty@xUl7`~-IDr#2&f|~XM?9WvD9A*IEvQn8@ zm5=1lj&vo&2JL?T&=U}RT2VMN?bm0&AtrR-V3K94s1@>IuZgzHT$G3mB^X^LT+5WU zhzt$Fuz`(KXkq9%oLK|-#xJv7GBp%$9rBbA3>eu|vPxCCf(z(UQ|jH#6x5V|lsvGX zz>iLFSC`)h+8{k@<-Ycai8bBaW=hjt2Z34Z?N}!_;BgRWP{_dH$p~uD)cbpn_rbW5 z7&$$h-#G6^7RMb(Klutk&$PkuU2aS6=&K~knZwm)W-EAb*K*}ta!RF!-uu3hm6rw9 z=!rBk!D#Jt6^>WOk5-at*NIe4%nwdOdiZ-f&+|Z561n`H*W5(gFEd2QPx59*_ndde z7bwz~Y-JzF>z&zcdnXFSLN7M(31M`1$hro%_ws@MuL9qM|ABYXt(av$DgywRQDFa4 zgTcVj0nq;o32t|~G{pWNDL>}XaDe>3WP2rCqx%05@WF_T%o+dt&Q{R~3H-m6zp9ZK z(SNHESEF0d|5hCyMmR|SsnVCijF|sv(Hr)7<0yW!8t|_vfTG2h=pFP8JVO)+k(YVE8HEHm@dR>RjF6_ylRBrz3{FgS2;WUlkQ$FnN#6IG>r^M*6~blCsvg(!UXSU6mJYW`G;oEH3`gNT7?Dv~h*xX%oCaUzTSOyJCSH{tkvlh_9p<;`+ z(_PaI>E<~392;W3DB$LECyGcBhNXl~V6UXf%E6c{4$@kBtSD=^-Rx^1k zo$jLA7TtR}drJ_x(Nb-7diLkvBI{Fkkj#1_jNNjL6$B-X`Z^1P>#s%Jn^*PTxqi34 zt~G;GFuG&o=gHxkKX9F$U8TTh=g^&?zR|x9uYj)`?^7(PJc_|)Y z4#;#yPBq^Q6&A!(*kh1CP)|jUv2u^^cCj?eg<^s?w~+UHxka;kwUz{ zkE*f}YZRki*)V6}uZ7eNg`VlBbM|{q@ycfSi!_Xyjx9@AKkay7#b9{b2;fmtf zf9HnI>_digW>Vxb#A1r{aIs23x1RXIH8RBXQ+4O>Jg6r6& zjAaq08QKXkzo7#a$1Z`PiCH;kA~bPeYxARZ>wiAG{G#;ePc*t;_59rW9<5@wM(weR zb}9#=wSpv~4+Cuxxv4V&a&aWq$;o1bHK}Xks$}bAoSAkRQz9_y+!}vaFUmUiO!Z}@ zO?<2i&%vx{oAwGMk9_Bq#I4foF-=Q8j#IO`?LjtMiUj8<#B}AR?$yYGtBU-Jq$8N1RW*(qDTqDh&2V)ISdjLv5FJnE+Pm;?Gzd~xmUG5)}qebe-cew|b@>;qUVhEew6 zF)n{m(RNVRjeL*RA_FLrjp$p?I_^Vk#Ed`>M|% zaCiKvDE$LiL7y)M36gb$RJ#(UOjJixo?}!&Z(SL(_>s|P!yZqJKvVVSH}#I{_d0ap z=kv60wX?s^l@-^c!o$AgoSGm#_OzRcvFeDE!Cnc~1IyYzIDUm3JF+KBDxAIgZ4@g%r3&`2XOid7d;gu0Rf^sc!O?V-b$iq%A+?wme- zj-lVcJj8>e&y$bE-DrbrJpI0RYooX-k#enJG9Jnw-fL0B4V6Plw$zX!dm@HyDGLM; z&4ovu#a=77_C9g={rVhFZawd$JhyLdgP~Fn?k+xE_MJBe`G^u_39;^JKZtD@6VFcQ zxg(NLJ?nZ&m<6Ro=wAttZA`V7Wie3(%m-vFm=4 zf;sDR+q<{UGFidHcY;UyV4Dfltk_)d-mIRl!1=bt4iK3RhW4|wXZKh?v!Q+SZnE{m zI|%$`)NWk~V7jXahNNw4`2_q_75>POxp`PkPO|x zivKMclEUPJg5hWx0PeyS}gP1I>N842tH|Aa$jFAEM&2qgzuw$Yiqy% zfh3h_~hnT%}rGS=Kcke10$MA?f%XRZE&aUl%y}7y0_E2;thLO|1Ae2n z_=5Mgb)2eNljDOH+p3lI90+PJ133MhN-@UgbzE92(MYO(0cH9?hjnYNf-zl< zXzu*|Q}LbfAg45s(ON!^2UOK4Ztw=^#(W8^WR@Z+*F$}ZOQ+4L(ORwzNF&d$Ai1ye zce~L_NCf$dr;f{;Z>-($kJb;!ik(l6-y-tTc2C2M+DERmgz3>nn>+alzrMGlzOKRE zZj+3{XxB~zcyBgNK6AlThqc7Ikdg;*(eiQLj_T6ge7XX<`UaAoZS9};Ym#Hng|2|(YZLFQl_I)t?r&F?MceW{m1^}Lj{(s7OQ>+m?(9cF^W4-l1nDgU( zUnf*X_K?lza6Mc}85v=D;q}&85(VlSs~QX)XL20jji;TL?ujHilUNOvAk(!g=>|F0 zo10%#9x->5eeGrX-0R-0PkXPor&mrM`wn&v2*FGOeYwtejot!?!g;nm??*f55TtCWeEQn1lwyIpIY;jkACE^(^{;%Vrd3!!;`#K6wpu*^c>M zgDIo5Kb*dN&=_z;sXm-pKPLKI*YbmG2%2R0GM0o);0ZV0gsMv*Mqf6+~PZBk*41oDCm#@4*H$=&`D$dHkp3Ka36ab z=;`7l`yo`gOJ zGsWhIqyq+$x61J0skp z;lS*`o!!+PbOY*^rKw~ory6jBy{Pe}+Atx<$Fxg5kfft+;Qf7)qLK3^^oydV4<-mh zjWLq`u9_%eE4O?;byZm-!dOYliGzWjkxgzjR52|nK8s=y-f zV?Kh%u%6m_T!RGu{=fl@e+jd*VM&9BO`Tm6L*{xGoM!mLg*oBLCvvYBm1DRlimfLVP!Q zss0aGT`hsc0v2G{qR@2RnuQettQRAd;@Gn~F`mpv=yfmUIWe|jOR$ma>f7|iXaS@Z zqbO|or?S-77WR2EHDQ;YeAW%$?)OvvItD(X{*|W`cwRkI>i}C;uaj7Eallo_6XNG- zlM4q`I0LKq-ffl6%?WirfRK9s4z5fKx}WaAs$UB(#ohF0Nw{r6k@VCCLZI$zN$&V6 zRCDv9f;~~}xu&g~eS2n?_%0v_dv{F>{#Hq1h`%K9ly+8_;zRW)7?>y;wkIKB6IjYf11csc);erI?@Z1;$2O3w$ymvbSGcFl7{({>JUvY`Vbi` z^Q%&^vYTec)aF|ZQavdHSUSjlbk=W*J4}_#vWSt)e@!sb=;1>RNa3eV54U|gD`7DY zEB%uw#F`16aNfHNTpShSc0Ozt<(7VPD%HPl^`ZY;5MQA>khDJJE?Md5)+REM8&*xw z_wmZ)RXgz&PBZ_)WJ37LdK}5Tam3f!*-04F{m9&TFyUqP!20zGyvt43KcY+cZNlA! zz6^;c*`t7Dmn%r4#foYz8ORwLQlOG#L}#=857kcy|HrKf283G_l4q*JQZwfl$)$e7t#J&ucNv80d_OTL*! z)yPS7C-heuv=$kM46eEa$=E)&M)q_pkL0Uxu=25~DKH&TyoPjE?zqmv_bXA0zxgO` zftrOGuJgQ;D6aUGP64$;<87Ub@(kpMP<1U#1A*(!#nwM_ZuV21djNY@E5u}Oeccm6 zCzN``3R3eNFtp0x+Q*HKbyBYuBjnf({gpN^^oOW&+K1+fovX{?_sr-(!O8O+*h$SM zR#)BIBqgp3gQ<}7C!HjmhPEIU(P{^d)Kbku@--;)!;$@#v?J8`k+X+=>hs|wwORAs z>Z|=_OLPyi%PdE}a5i9J8S{C+(v#>9XG!&1dTw+eFgNx^Kj-!rPb$#OxjFO^UU~h} zX6|U`)iCWo4mD=OIIpetI>Z%n`TVfjQxQtJ%#b|U{Jp<7&^@_tt zFLc{8W_Jvvri_cT7K+hw;i(J^nlaFQ>=vp;NSN#W;B1Dqwu>wY(@GWF%fU3}+kl^i zp;sCi*ys%aNo~POdDt_ad{K7LFf!-(O4GOHJEz`)U9C2)09{T67sbdkc)GvYH4C-r zgE!-N0m^L!%{3f2{Y4a|oWr?@BUj-^mP0H#QQBHvC{O>ru`gEu)scLwm za7`f&hHq+fRVzO=eqq+kCKPq1Ko$`AVh3>o&f}fDiP|Vmc+8Yan+bqiKLQB(9qT2Q zjhwgdY{_f0H{mf+Qd{7}X{eLeQbvDl&^mrC1$ByaX}D5ien8m_6*VGp+$W5MCxTFH zEn4oznvo(r7^UG7P%C?Du)EN2+r)WKmB)V3w1^(Go}He)P+r0B^Pi zTC=1`f;QJ2k@6o?g>RIPFEk-a?!a&J!c=g z!KU?}=fE#eb*>_OdVTRnQi_$_({KgSP;?9@UxeUGP`uLcVn3m6e`#40#l{C?%Zt*_ zm^@oJEsqQsC)xW{s!E99z~eLvGM$wIgAJIRN^B~eX5Y$IIj24S31WZm+Ia0Z2$}I+-8%v z02@fxdqmv$o10$0E*&S%kI6wR_4eXq-vXByPr*NN%PW83EI5zPXxU=|gwRKUyqV&K z46|Jry^jQK`vf4rxH5f2k-obb@c5yr{?nrp3J(Nq|6xF zo>#G8B_^&0umdQSFrCkx+6D@ENJ+S#r0U#KfI{$2h1oj4q%+OWWM4q`cH_AVNVKdt z#x?OJ^C|n5?0kWwSBA&Gqwy1f2{sPL2(vb}#|&fm$QEj4;s~pCBt1I3 zmW984mkEJ>DQPmMJOEa>A}CV?);gWR0=zrd^36oBKIr%)iXFU$IYb8tsaQ&`7F6~% zYsVCXze^zw%FKBGd^>1>g5S?2z=c2F@rzp;gA>N@Z!Ia-5sI*DK*O}`P`Ssg>TlhG zO;z+wJNchrovJL!POiS*zKG*k+>sTg%&>VD6v-e$C7Ce~&BZL1)P~!p_SDB7NZte` z90>W4(A3R*PM)sb_lO%n3`U*%xXK23U0?2Vz{%ZC+>TJz2@BR(2Pf7aSKK0+qSCfGr#{NH<7Ick_`K^L7 zp3Agw4>wwqu=8BO@-C$4N?#Vi#4EYQe}zrrotm~KUVJ{g|)?Ii9zWqbTX_Np(1jR8IzFhL6*d>I6guA^? zcptG};4Kpv86O%@+AwE&p?Qz6SnHI+tq|rJwJz+Z7u?>1DKb>2$-E*!mHJpQh77(q zMGtl}OLkEQzF1$-QhGEV%aj&;-7*dQH7JjuC_>2#7lvk?YmS8}9r72}{n7&IpXlgQ3Ywlu+kcY43P+Qg?6avi@Dc~3|PgdUBj z6r^uKtho!YxToY~mC~93Cp_h76F7Z_&p>=S>>B5fG@@FxP`J=hXf4qPwNt`T>hb8q zI72U|Db$ytpoP1X!N_?xs!NBuAt1kUA=<;ut)#VL1jzHqo%P~DpmH($5svZ7yEPaj zrI*Ui zcDo5)^7HLEGCf>X<{+Ns>g8dX&Ows`*;IbycvGI-=JL9+ak*ii`;mz-C2axZ92#6f zp2UH+p&Z6ohb*9z)B981=Zk0rR1{?DYd_8~Bl{TGS!hMwWSHF&Ev>K;#QZq>)sF zafyxcCRtfOW|t2OnWT<5A}ygCpQw>!kljk<7mOis7x#A#3btZcinfxQp_24Q*>|%2dQ{tjw+#?2=Ou6!R9xg=2ge%VgsJy5zL*43 znjcdpSQR>eL^s`~#Ip*>5I2U>Awy(Po4Oe3r&K9+l%1t8JdP&Q0Vr+2_CGXdbgZx# zJ3mvA0#YCpg?@U|C<+HHPx7}WnpdeG|7Dk8?y$5>;F zCzlX3|wT? z==|$GyOGZx7%tG82T{w$RupZ=D#`r#GC*nr}YHhm-HM` zKbMx*RsTIle_w(ja6=>i8N6qAg5onk-$qX_Jhl;bVhqwG_WO{T1uNJo82?YjL(9TemGo%C4|X`dz)nxGStl&BfD0>_R;i*dR_lKseXnhn&s0U(XacNC?R zbWM51&2Vrotumn8P;RV0eGRx|1s*XEXet3=Z{H06%1IyO`NU&5z zM{N)lpO&`tGWBZpMi35sxTdz17N57hoZP)n>PJB-fjL;gL*r z_72MYgd0m&sXn#zS2MgonI!;&Z`Uudvy=Hp(`KAZt5Oec{THaUMMz5?23s{K4K{U1YnnEmBQ8QwMPF9ulu}T@?eFy~(vJ)g!LNp8pZqlr= zg$e@5=}Woj=LLT_I~|8UqA^2tbbv2ZZNB(H@QJ_~M=d(HjEUdBU>LKdaA?)0X|Z`^ zDihHmPo;ofc>KwZvYQ{oNf7{BUWZ))n5X7=ecyf3x$)g==3#nxBj#C$mYlr$$2O=i zp26m-OO9w1AfN(?76=u@g+);S3(36fFsbClQc?r*=;wlU5^h^Pg661#7y#zz!}FQf z&unGzM}>Jue}+OfPy;!{0<<}_M9#ZEJW7a`F!G8=fH9XO6~xDZ(+zVkE&7$4Je4e3 z&rLR^sb42obQ)-g-i%bRS%DA=cFNPO?U#IZ99xl_^7lZcC_SbdW27_iOKaPKX-!g< z$gFhY3))#3b%0c^K#5B0SLjjR^zuU7p+U!+*FE@|5S>Ml@3=#-BjjdlfRyMZ95mk` zOX#l*8`_6(KP`fCSCx9_S}?z$evEOKdD}+|OTE>QfZ+Y&VbRIJ=UViMTwdVSSy){7FP19W5`3IYh@xe}^HHxWPA2 z9sxKdD5%Jt@PXSKI%uF@RI8!_9C*B4IY-!tL3LQX8;)D4BPJFy^sCx1xwSZ7o3;ro z=$tZOD_*-bRA{u|g&YYH!KP)_yxM8txS^J73LrodjXmDK%VLSDJadzr`>gT0;|F+> zq#6sb`=c#^P2bA)W{vhs`zA8l4!_Z~7GTdKKha&6FTBaGgsSwL*3F*p*rnb|@InOT zft}Rt@*vb!#cPuooY~p;WE91x;yRa-lnkZ^Sx-^sRvHCz8F8gee@jQ;7WU5y=LEqW zo3()md=XwwNB_pWV9S9W*lI~}4-uaN`NX~I3>P;Olenkhf+W2f+x&g8aZ+lR}Xv7wJ<7@3c zfHN@HX(gLKbjaV9PBV0(R18I7w9W=l%niU*GccU=c3&8}zxZ-)5#%TL0n9fOaKdS# zO0SFW&DtEk9i_hyl9EZwidr-FOX%gY3H0GZQrWAm<_|)eFR83Aq|1V8<=}^@OwQBn zd7;ajX~jvjI_oPnwTsCp(L1FWA8nSX3>jJzaFZ}aWP!YVp-Z5!gw{b75XL{iN&f;@ z)jeJ-rxO5ntnh`8;w(c;T$0~Z(pm}bwelWz86(uC@#iNrihW@FiE!_^ols-f;p@;6 z`icxYVjR-?v8L7m(R7RCt+wYrPi@J(s5I8hF%(UbAYTa!#_?w}I+92i3z>tQ@+q|6KLL#DV_{Jsyqcc$kjormj8F?X#bliXO@E^t)JPjLSeIuLe<)hIMKmU3mt&jx-u)T( z$A$Z~?b(i_QTv>TgI*4`HY>f~Gn1(fzuH5p;0y*%Lx9T?E${q+71r#M66TME5ElS+ zUM^v?*RHgDgc$P(rN;uR*CMcAs90i`p0EWM5tMeqecLx05mYJh*Xt z1A_%C-4%YBF#6$@EL)O%Cq(oNd_TSyG3#^&BF_254b)V?q_yVk>Q~5C(r8y_6CEvp zIp0*Zbe5c{2-A}v=P(T$nz>~Vw%)j#MY9dBtAFlvNUb1}OI9~8HRi{>=c=uaQv2>AZtLmv>Nscmh8&D$5g#Ul|u zo_oBRPK`pvFEbX-c2T{F8`OzuQtO9}g^Q>(7^vH+BAlT=B^D|vXdqm|ME&{P+F2eH zsZn_{fdJT00qezDsm8;{;96?~K4^YB{!Nh>w!yBr-6Wt#t6|!fX;Sq2iZ&Y)laOT= z)ZT-$p^K<|m=<`N)*vIt&?Y0}NbEN#d0Ix+IUO4{i@>K38F4@qm?Hw`+Gj8i*wW0$ zyLjMf%WJrCRP`MBt@NJ_VZ|-^B>m z9b_b{4xm#lUTGU{RL^j2<=*rZX8yCF6NoxaMmU$!7h6sZR|JcScbaH15q&Jz1ZVB2+pd=_@^6MKRj<|KExMbm z|BaK|m>xcV@ozlGf=&K3^r(i2>0P;4s_`8;w#VqvS>kz;=+$3(a*}VN=0c=Cg zaTI)DGuQ61SbE4~XzF*@1iH+gKjtlkqP%TwHv_E)hD@{iW*Bsx+#h=#E}qreYn31z zaGCk1hi{y33o;2TJo*glgb%W4Q+fxE!}B_ke|`4U*SvpRB%SN^jfWMpn<0F_qjnA@ z_#Ck;NNFJN`QwzFLpi5-#SFsr3u~=*I1rtGe&#E0M<}*9)F&R?=${g(CUxFdQ$aQ!d#jjQ5}RyyV7kG%*2_SVT~bcL z+}hR=^VXiY*2#|GEkQi zdLPDs&gzf(_ji9w2)^ldbedpU9Q!4!6Y**xUCax&#X{AkMF`Al8 zL9U=o07uku!EEkyR*e!RN|VkqaSgQBM^3uw7nNQobw+aA1w%Wr5%Jb+_X7!v3|cAk${#Tii8IrjmYUTHuknd zgahI!&22tIdVK^1B^5U;=zKzH!j@v-qf2GzfhAl!-tMDj9Y8So@v=QU_s0w=L zQvjq-^E>Jmr7rY3uK3-M%+<`Gust!_T*&77(#3h4YZ}{4YghFlI6r4{!e38j)xEp* zmQ7Z!-^@OgNpKwjEF#pT4y}&>wVV;;RxWq!|c#;_pzWC49BX zczebd>BX}hcDWakn{qWSULVpL&<3bf_a71$G-TKIXfWQh)Pg?!!~6DiC8hY#Gs7mEWMHomCkpEpfdS;(twlwap^`OOPD0-2^z!(g^<@qx0IFvv z=FGS^vWu|U@(D3Y|0#41()j?yR^@|(0`Xc>FBwZQa_-@n#&jKuq>@ z6*lLu5gfTS>EoBmU@{gCJRGb0E`5bUtvlqWOuo#TsJcKrCnliN(YBA|e^O6hJiBm7$fX&pZbq6-{ zw_&5Ldro$qx_AUwiKD~h?w=84b@1qfpusY~W#JDKhGmkbvyUaq4&=0$r}467mfcTv zYwufg5=YJ(T6L2~0AxXFaNBA*S%|_qmA*2-+E$2|j2VtPu5jaM)3I^= z(0Hks&)Br4#tH<&EJp%N&Q7t`c?$)vqlV>N5kxN#zYRz3Y8B-_DW97YeR+o~6)~Qf zADs|I8jUt<-l=Z1AE*T|t-F1tjh+A5vznZMc`Y^i@dCFBbu67e{PbiYodN@lm!^_D zX<^AgUu!njCpX-qzJ;V-67p91WVnreR&K1XJ33|Mvy_^jl$8La=u~B8mT0VVh$)HO z4}oaYKe`@7KdFJgr?eUWU2jrqomMU=tcu6zJRcSsw zC~~SgjdutwlQ!Y2Of6hcwfU6U za6f;zNy~lj)&iY)=)6=d^Z(@B-<|2}vIzdx-*r zr0RK;`6T%k0i{%|K{rRmu(K;LOXput8g1V%E(Ja`z`5$D;(h-_RQt*-a1@C2I`(;Cw_2@jKWBiK{&(K1=w}4|BfK$CKF`*X+rStfP&b`m4KZD z-%{2#I456rk3(0dn56}!QSiiE0|Ra$PaG%)_InLd6f8F?7Ym_mB7tQupt11=9We?7 z!b#monq80ERBVOlEr6-T=q=!AQK8s*P9YO@oFkcB0f9qYw+xl28kX5+mK19WoV z{YEzBbFJ6ATAv=UMfzUx&p1L3PMO|DW84)ipZ*r#U}p(J`m)jZflec0p=)}5@hvcG z)M`c$et^|D@UXyjo>%pZvFW48VBXdrpq#r-GE?5Bp-4o28UMguJ+{Hb*= zGCy0t7eSh5@>AUzZAM0~po!Ze;f}N&eME7OaGs~E^}L5+3ObF-of!3tA&={o4;m%1 zUl#_b`%gvw%^vMmGT4MwRHLwVO~&w;5`j=@r_01qH-F7CngD`Vix6NM6JccFkcXl%L^s>z&} z2hWkxK}Bio9M|i395`1q*?7q^mn4@52yyL2&WYV$k^yH)P(2!{P<}vMva>Kaxg+7~ z%_-yi(XBzwXZs^E{}ofqaP%9f6eryIc&pPM!8?Lzzk(Xe#%U0{q_8$Z`0?C(Is#-LKZV|wO6_hBIf>@rpKV-Q)1J?mr#^y#9=OB*j&GmxeXZ8 zu3ZX{YIWI3bIdO&7Rotznldqq9b_)=E0!p0kQlLQb@>+8W}<<&9pZ16@h{ymbp_AC z^O=)Os)QqCuUH|+eUmAFy1FhEc;&om>cpCHN}J7M;{MG1iO7X`GK>V~s~BB@+AZ}ys|pLtic2Vf z{%HEQxB43Y>vJhaJYJ*a!~3iB4w3veC88vY{h^7cdr_1zP6Q$-5ioR*A ze(c2z27F;gldYAJ53~&D?5@4FtB!o8HSB|MuhZGnFFvW& zY;^tUASDd@0!m==vW$L<9f^f@i#^_k0}_wo1k6Ugb&a~_gZ9K7#lpH}XbfPa*|i(M zHVmLEvG!iGttv~e{Z~Y;HcR+Usa&fL_1TgmKarzHXp0SfSW6=t>mzkUTdqQE-GF2f z3SWs8tEIj!yKD!%UcV4+4v1RyL8VVEHL)BgpJom2H}3??E|eWw^g*o@*(wD*`y_+` zC9s&k2+Ee$Yz}jOm^zwffJ2HOJb}$hxGdEk&mj!s=tx^a7|l2vm+|KwGZ<9!@Fb3^ zJU(s`4|mjTAgf9f(Ee#LW9b=RO)1yno8#uTS$?%%z^H{nLdUDxmfOj ziNE>fDqJR`bghuR%&!@@G}SeI2u^VG5r9zl10cxeP>=samlljN7qYya2#?V8t3zN#_E!g`eY|)IQr0L1zw;|mSY6Ard#n64ADr|n8 z{9ZCviDZSTOi2oVn!}c0a4xE80Nr8L#o|6%0%X?H+LKiv;t zJY@Zsj6cR7q@k$qi{;El{yjjSiYZEWf~=>cWqTfSEV&Uxmptt6pS{l;G(FH-^<&f1 z-KqtT!)C8S4&AA9D8H%J1etzw58;Oo13-%L8GYsjwYpMsu)srjL&j|<4uoMWhpMcJ z^J0&wO9b*_M1P?L=l!#k9(#9=GFoKl+vd{H=-Or5*O3NPEefwfP9p#%fxaeOTr%sz zcO#((aFR?(J1l)Uz?rKoFNFZPMbL%09N)*$_M!*C^{>&(f3tfSeM$`t(*Dw1B!FVm z#QlFWTF`8{^c}i@IU`w54jPhUD%cEn35g!Umn3dYdElRftm+NnS?(mHr&i2WXa(v-_zW4>POK!Inj!>Qs|142S&p;P9?JyH^|xuN8{ z^yP*LX}oN{NQ7}5$$`-6jC)q>a&}BF1r8cBBl&qRMDWviaO^70mG9}Gks3yjkOKw~ z!H4JFk6i&=T|AZEwSRachLBd8<5O)a#Oyxus_R>z>YEy9RL6%2(u|DPWEhzu&fYC^iYDlcoXQy0{rE`5@#O2_W%h$4rN=ai z$OOCGCvZKA%0U`RBKrH_e|?@!2S}Ye^q3)s58{}q?m?tG6eY$cOo|bKC;S9p-<~UF zJkxOd2r$4D5T}DS3NWt|!3WD|KjM7$pXw1cmrl*}<5S1PI0AGtzVQFh-1ND*Fb9+i z^pXQ_i#~29TN=c7;ieuD`msie=mHt|uoweC>OQgnkemlUK(Tl2`V;_z_hF0u!+ue> zN$dn!JNRIXo%y~vzg>5Kxd6Zx!Uh3hT;nnT*;xp9!;Fn?!~i3HCk;RtIa(hFU@+&@ z)zRsOl)h5mh5P`z4}UN za#2XlclHXasuo>Htk&3jTrlCjDA{}U;ur(bl(sUYNhH!C5(B}UzQZyCnmJAUS!_X4 z-YzsLqQCc+I*9FK15H33cQ;1KNIlRhS0_>GIfAe^cy!7h5`U9)YcxU=Z}k84v=IIp zbBtbGj14TO3JhVWF^fuIY8P`f-D}bmBp5Ln(>-j-@)3nrSB~@A-n{{=k;7|By3(WC z#A6}nif^`=4#VQo@uo;&OzQ}e)|_md_t#(hy3zeD34V+yl11(PHbld*&~#!xyR_#h z6#nHJW9F_LaN*Q{VRDeFchJ_%`)lW|=v8dpX$fT=ztX<`MsFPf{iDhG@Ji~^TOdfY zN93&nQ$Ujp@Uhq2kdY2@1Msm{`CgGxFiq;l(qkXdzt{whonKUf-1Jbjotcc@oI&5l z*;F`gJZ#X@$a$0fR%hI>&R~w6T!(psWXK0(X=<2_;bO4=`HV=*PHiz0cts(HcwaYO zFSTFe=QRjO2uxIg84z@5|A(t{iq7PDqjfZ~ZQHhO+sVYXlP|VCv28mOb7I@Jos-}H zoU3zFt5$c{MPqeW@7nu$e?+t1x@p>F^QHDK-ytWf>q1$n42V$<`4Gzh;QO5geeAxY z*k7NoEIL>1`pa2Y=T>?;4t{f-Jn-4M3N%~-aff^Z!}smCK6bphIMc_zp8PO`O^)8| zJ5Q5l9#XcWJxCxPJ40C`b5;>FWdH`ZCw*w!-5P_H>&-%d#Dk`nsIv(2HN3fo&2_Od z(PZc6*7cM?hQaMUiWzvXIMc=TX7fT~)Xg0}UdhO3kRBWAKJn%CDqHIHWTZWA2~OCl zh)cSk`O3%pO|h9uuVaxNZaI#`*>J+!=57-X!Fl~%{So*OcVgUI1~!&uML*jA|_hQw_@e3R3dAd93$vx3B3eSMUB zsg4C*<7h{CK>E+U&v#Vhb;7;YG!3-Yo7U&#!dE=X<&zBMKE?s;kEFfjwnT#^<78I} zWz1h`Mg%9rlnSS?bVo-@*S(Sm!mN_JK7psM8PEfmNBeQY)D`sps{u0c!caGyK7^jh z&JipqGLv)Z5I}iYUt*s9C+!QBb?gx|`7|tuf6o=TWx5j7=HbtMKCjp5gtO$dVRRc; zgPVfrmV!Ay;)pwBGmfr2={dJKy=i1?DYF{(Yv3#0&{s7^Zox@WpV1>jW zF)I+C_pf4}es0<6+1GDyc#HO7fBm(Zz~K}kV(%A|&(`^~Thyl`QtND08W@aL$8RA( zs1PP8340{@2YF<#wz1K^l2j#n@wUJU-FZ?_3Q;D5-13Xn?ib!5A@dSfY*~OT%*_;v zTSQZsy9ZSrd63bLVi8&&quW~6VE^A;k*VKCS8SI&euW4I<*msr*?z7FO|v%sq@U_| zUDP#Vxh^O$K}-}nBAQjwE5@<|?a;pgRI^m)Vsxz5YsP6$)n&;mzx>83K0f|bD^s7- z{R^t3KAHh-F`(4Vy|X`^qFqtauOrNwnzMVOqwDB=fPnAP+uyNEPXe}m{Lr}@kAEDq zjW_I9rQi4|n8kft&go^vP-}f`$=9l`9w^b$TpD>(q=cy(vqZP()LG_Z5O^<< z7sHk-;Ec6XO^M`i-0^Nb;E#{BE52;l06#qm)JZHVROQs1D9mdwnye{RK>v4+DsI$2 z^gVVj=8UhmRb#zt=_-18T`jucfj-{bnYIN|a)tnz-l2l~mmt>Q`!zbd+q2OLvpajM zZ)!`3jaScu`!&B9sN-e^VZ?qFKzOvLb-@hzhhWerUcA2pA(U1!#BV66ik|n|Z8=td zF-qA-?tXR_O!J>$J!yF(!#p_d=DIq5yf zd84bbxwgxR2HkBQHVo93Chu#^I`iN0E`EG)jrC_AbXG)H->9OSDMT+5W%>UxM~naCxS4f{m2l; zJ*Mp?fw+)RHg@uCrVFp10YW5iDwT#YxM_cxT(L_XUC_LLC>aMEX{By^A$|oy42^o} z$qlkTea1DW(QmEbg#X%WLRAmD$t?kIn3b8*1mUk-|T2IM5%HB*=u36EU$ZRhQwHaAK>Hdnzq33?3Q4oAgmQe{E=3+|B)xCKrMiiR#Faqgiv$bp> zx}1}l4znj-tZDSCgou+l7C}L-)q<0D* z%M&Y^W$utz^!@vU{u4N)W?-S^>7vwFadn8guP}gD@NLy*a13#cEBA0P?wNLF@dXM8|mp&2%{vvQdVG9wMONs6Bbm;Pwlsn1y>SZ#~KV=#%i6#*h+S zxQV?EUCe}}5O9M*1`^3wZ=x&z`pkGygc482#JmpVr{w||7oATAStuGVWWQZ<7N zj7n9^ijNUG*Yk)JwWPxLh9uTYoMmV zLmFcMR3AK@=Up&{rrnb(A3THNQ`KTN??>{c)ckQvE3u^386k8>^Rm^Z#8a3|38InL ztcQ|~nMA}V8RFTs6xA^F*ff=ezE-OY>x$2xuOsn0dn)V|`t<)Dy)=J+*!38^@w$9B z3z*?kuz0t5yqOHMi&uj9xL59r#UV^59c8Bi`iF7BqhS7&R|T08i&iErQhS>^``qpt z{Y0Va{k;%JF8j#H!$otckS~YXiH5WOh~~=91bAl(s}k};Gx*eTW5R+q^mB4Sg*)f* z^43{6&5AsmcHm?!E1u$nAh+Jt^Ygr<2QMf9 zbY6Su@?o8`gje%Rhm1HDGymgUv}ERT0@}yir`5qD8Z$B3(@H0Nnb_+vwHR9h->oV0 z5Ycn3)F{}si7vcMLV93vV-8H`jNdKBghg1Alv>mkn$k~P#=4mJ(qUqF= zJU#o1p6NxY*OYSHxRCRwcyH8sJl(xz!G>;`Fb*94EtJWTIqIP zenBnx+dr?(rsVj8eoKP__pn=Op_B_%7`pNs?KuN5aija+Cj{Tv>t5Phw)#wPeRZIK)qE?nF;6Y|a}*Cg=L ze~9lTcutKK?TePm;0kq4mFbQpF}|OR@+R z-9;VM!6h8h#<1b`UQ2wP4;ErK9Rg6-Z1~h+}dUlrl{h0!rRSl&H}s zO!@wP8pU_Zv*kIbc_V~#kLr%qggKNy$WXDQH=QjCFWx&Kx^nK>2Hub~M`()VYU1 zw3v|!-8?DQC&=ZhL~%}fu%y^KM$Y%f_Fcp}p1vnOZYT?lMVh7e+v~Yi`=>dlR0~0w zR81J)j7sZ1_v2-l1fSnvZ(j8%!_BR8(V}cme$DeuP-cY=!|s;`_h2Di%5pB4xf6e; zGtd4|X)d6{>%QcL{Q1~mA}kE>@jnL8Lr1z112_=SB-;Ovc=jXW!;pYab7qA(%p*MtGgNnsPIA;q#xCUg0n_yNw;tcCxmz)%e!|m_m^^8%x}kjw6M>w> z@~>b#hphUrL(fOAi#O9A_+-2pw+_2v11?vux7BaRox4)h;d6j{8%_Y$RV(6)hrJJ_ z#RlQc-@w1MCnJ7VOw?X8=IBA>K3Jtf=oG-E4*U6sZggEZ_}z%T6#ASV{y9gU3{m`8 z&-G_0IIqvIi4y#AB~7NeD+PkX^A|Stu&=^h6o-lb5;+a=(I1Ms9Uan_`sNf z(fasf;FFLx)}TT!O16ZMOF8{D?2=&KnWZ1O*F#4i=s#ubvuGg|nd$>bKg!r4RUM8i zJ;*h!#JM(X5hG49Fyb?cFO(^1Eyq76vh{AA-?%jCqYP^J@|ytRxwkGWhM0b;Itzgs z+;R2_y|S;!f;6UDiOwIvE$PH*jp-M~hP(_xhZ6(w4IVArvbX6BynW9L5>3ECXC~Lo z_HVDmw%vg@8qc=zL5x*!E<0+@I7MY; z`(TV-HednnKk6Ch9|kHrXYGr!6>KH2iW-TaJJH1wXGO#;YB`PU~Ize(bfzwouH@htcf z^Th=pyb5J}_8OL}0=*o9;CoiSU@b0FupSf#xF^1pVb9eCh(1v;veNjWzIB~-3d&^*|MImbHJsA%4f*`GZrI61f`M*KJ zN)~Q+kpd3K5dCU!1|E1IRnn#Gf`*vonca4abLV%Vo_#P6?Jbztn1#-LO7kT5DOm2r z&P{F%K6J(PEplo2BW|6wa#_6S{TEY8_=5?4J#F6Xo1_M<=6}E{L_X&KCO@Rj7?$cU z{evoH&HZ#qYx(5T6`|n4EeG;y4Z$2879RooFbWuU9%j8e*%f)%G2_X+eeoMboq=?{ zYi!Fa;+5u#s?}mYHpG=&Vb!Mvn}oj=U9oNqrf34kzYP|sv}eApPba-0CaQLSp{m{u zWFW4ev40$Qz+d-ohWw{39-K zVF0LgQOyn6JF+3>x$aBu)>4NqA{)sR{^AZ(`Pjo@M{<6EEv@9|ejOL5dBEgTO)H}p zDK~+ZGn)z@k+@|KMk#OIPFu6*+mcWuboLc+u0_4bZlv0`ZKUpW6e(RO?$A)XVatlL4X;tXKrE>sBC4J73)Fz z;hWu7zNAtx3_iNv009&;TBg};{Z(Vi>6?&VBVxVx=a?gIZOxt=V*FuA^KeM5x*#h>4 zGcG+(V&u5Yoq;t4p`KTXCHsJq_Qv{%)O-OHFQ06gZ!LBpe(=_s{Rp-(95LZ(^aDT_ zC9;e&VYd?f$WNuhyU_r%NgaVS0G3gRcU{I%h0+5iNOywEYOqenEi`Xw)K96z*c!o_&%6zXwj2glQ8-C|a)O=D|Y)OIBuK$(rPTztP{JeZ};tbBh+zHF_u23M9m%h1&= z&;Em=HazWvy16=CM@^9hLl?5IP)YXtQqmbc?KCrF|@PSD2?%0??Gtohs$Jd0O)cypvQrm%@(2q>W();&{UyV80fJOD zC;A#C_3|DU@^_NasxqFIEvz2dAHqArjB;Any$Z@?cZ@Lt);+Ia*LR-?^gjx>J+LTT zCRMdCo`6QzyUs)>-AD-ys@72V{uL7kc1i;=Y}1(T!EQh+xsBm`DJ>V4X1VqsUt>rhVmoSYQX&dprvGTO(>IfUZj7*Mn- zi0G>YTmNE`+7=NnlvWBo?0Nm8vn*r;F3P(J=Ff@cv0Gp^IP{lz0e3dSWQuvZF{`RP z0wVG6&B$K{u|hzX_3_QXLIP8%<}Dwuh_<|qb0I_|T_pCk6Bw!v0_x1#aMAm{Rw=4A zVZZ7z&&4)01;i&;bh(f8&?&Z}zsvAc{#_8uJqeV#!SbIVy`uir86dZFWP?UCx>3p#2!dwYKHDDXp~h@3Z8Sx$kF|EQBlUjB6A4Ot8=UfG|rg*hi0O zqxlT1{sGZcp5Z&dN}};U+Nl$q(_+8GE1nI0@yls~d#g=pMG$z~#wzcPV4GNx0sJEI zwyZ*#8mZ2VyJQ1#Zm{$r;#ZYLuffKst<1sHTJ+DMAufq{Gr@MHhcKa}7p*>y(9qxE z`o)J31}Zwo7`L4}5tTWl2!_Xk=L+a5-RU?9Ro!~@ z{v|FbY$k-5z!Wzae{yk3mNW=61Wz?Vf|8lt@N*(h#Br4IE z)L;8HR$hd0Sn7M_z5Jn`JXk*qRx7sJKxTh6*3ahJirQxXOeCU<^U<9!@pF|m|M5A? zN3F-spvYiE#f_dp*e{{kiuk!v@KYB`yD9sZvF>D(ce! z&L|ZH%C-t>F)eOY08rwH@@?rJkw5x_*@{MTAA(%Rua+&&f6fWDJ}QoX7ZVwcLc(sY z9N95Z4${@X#h^D^7DS}fk=mVHiUuNM2_xNi$sBlva#{%QGAIy3$-?2*=ZIkkc^u&~ zmP2sAqDEy|r)6VX<6(*SB~0zdU>>KJ;t^PWWzTUHX-c}+0*>E7Rfg5yi~uZ#9&P?K zOkvOwC}pvdyQWUby0=zwnoQnq@16F0=MAh515hbA7ZX*i)fJquCOTux@gSEP{mZ{s zrxK1BpWteIHefR6#yi^#=f8I5dRS#(GIJ7Fn^0_)R#d-&j+I8rEFput7{EW(Ijsy- z!3A6>aGN7?0IUk@SiCVUYXXUw1-ZM-4s?~*39|L0*eod+TbiZ@#^BYzh@-|);}lnR zQt)YLIJ1veUmqC^aU?G<@60l|50ERpA{%Vum`9_mRn9iU-%)Hhb5NNXorWAMuX<2v zD0>zr)u+h~I%``{sZh>Y&{WC(e?X;532~G>$MFsDQnuxwHt~ zDOrZxx*FZK079=!p_90x=UX7J;;|aG0er4R9}}8?I;}!0_rw2(ta*wS_LxK|Q-F?@ z7y7(UXx(4c?z_kzuGJ+JrSZGQ(m=I z^SC=PBq)8U?0POju%`7d;aynS)^F8McR4|*EdLXk&L`}c*a>|OM$(|#vm!IjU}4Sy z0COfgCwaqYC~x=suQd1vH3)IQ$Zi{&5B1_s9mNqKPJb+3~Y@x`4vj_NC_^4%*9W zLX3N+`$!3XrR5iXeTz(fDvM)!x#A=#V9MOtm&t#U0;Lkkf&`QvwF_rdeq?Aa?pytX zx0;G*?@}U8l6k%QLAnnsjvb7{fwKGw3NyH#hfC+cQqRgC$53o7eyS(!QI3fqJlXf; zAf<2pgFD%ZNLHLCPxw!n1fh$1#vm&@)aU}9G37Uw#ZnO?LG?{|PPUDdtA_6&;AfY& z%{?dfk&7DMG%I`05+s>tq0t>Y#|Hd|kaf4U+lU9SW<`Uhj$IQuvAQU>nbZ}Q30>0O z;h;_krL*zQ^%HJfsMIW_n7@NAH@GQ?^-8^irw{G07m|HBqVtR{5x8BjAzxQ6GE);Z z_2=S2|59N7GB%TZ934VX^}7)uYa!z^+*F_=CBAP2Wi?jTs>USd7lIa%RJ4SO{huSF z(^wi5hlNcR{r+mzP+$t)WGYJT5bsAZpI`9rEQyN#17D;r>OZYRA?i+DXtFkNtWy+J zh@zt>Pe-!oadOI78`)a7_2wVwdNEJrOFlx`_1|2A$^11O-78mpYe|3v=-qR{w%9@zhAm36J@h0UKpgxF*Hu&u zJCoHUNkYA42@Dd3Q)w57?TRxmu^}YF-EdB zxB~X+-SJK%Ol&x1NS$^gZd7?B^>H=qFe3}pctureT_N;*n=HUh{IU&R&Y27=jGYG< zQ(ea&ZZPD4awG*L<azDw!cI zB`DyffS$Q(;e0@$KwUqErR9Q0F#hl-5zlXDN7LU{ufAw3XkkV^F!_-%YS)k9MNq40 zR+jl}jZn#KliLQ)Ebn`?ixQP4&xkoC0zrs9q!Z&9n`FMTf>5W@<|fyTC&MtH2HB|s zOq=_05|%j*ZWzb1?x3*Oc|6obkKr6B^;~1o=4Z7Q7(f6YA&d(1ZAK0#U>$nVwE_8F zEtv5vna*{#)OF56TIs9r1#B8m`A>$IgyUdt2J z)uw-Grc49kO%hI=imCOkP{k%SI@V2H+6z^Y2 zZ3?%*XcY9RGqzl?8PMw^k5NZhM1P)v!dn%_w%S>auoNE^@lk}S7X$FV#4)lu{&p2Ru|5g#1~qRy^wXgZuVX&+5dHzk4XmkSa5 zJtrShXGrsm9rzA$R6=|+zDYOIr&ZkyI#-G6J#7Iyl#xxMx{Af~fS@g{l;=n)czM_O z901@n*3Gz^1EAoNJGsHefqaM$0*{txwtH)~${>|LCG(*1X_0-ALp-+hkeGj|a}~1S zo-g?ziVB&TRuL6K=wB&%kQlo@W4;%*En3-d|C4rD6pkpW2j9O!`mr`XRPHlZa5JS) zHD5mC* zd0G)!CY3)*H0gf@z4q7;S*eBM@Ap!I!5Q@*O%39+=v zXq>(^UF6Toir+u2=?XbCZN5th7Wt&?96umm)BB~b#8CBgdlp!+hbJ$?Mbk(^1ah>aHU$1e`oZDaH@8w(`tpPE0U2=ultcHX-DVz)P0CkXqd`cPumn;ZF(BF28FKvQ+lZqp{K=Fa?>`>DifqGcM zErVIksR1$c@B)!KAf(g#P$&L;ZJrZeA)%ys4cEJZodDwGm3!HFc~TxN0a(7VTdsx` z>-@i;I$g5!)2}CLteRFN(y4sd{7Xeqofzh>pn3U3!P+?*jFqR8?k=5tX=tUz~Z0hhF|TUIzb z^g71nhb*C2B`Z?+z`MAOeRXGy=UN%+{{8&Oa9pdNGN_;}9g#UEm^v28;uwPrTWQ(W zK_Yu9O2CQ`qXIEeS{^`t&lZMEZT7Sb40D{dfUNP9w79Nz3K(neToXSQ=9`h|g}vg~2g_K=v2P;=$BIvl_iT?LuXr2+K z6LS2vW?4-?F2-I;&Iu9VaG+P^JzIMhyA>()F9u~$tO&N!A2ogijlr5R^Zo~$#zP>_ zFYTNFc4rg7ptuIMt6KpE?s7=WmQJ)0 zl;D{IZ^+8_bU^f=^LKeqdAV;7-{Wolc6~qUzO}M)XBH{M;KpwT8*gpCDuS|KVP*Rl z9|{pNA;xcHt$c zGy6!Adw@x?jdXg2Ulp2ge+?&{h!N&Cb{DPx#4!HnLES%GI%h|}l>)#@!S~2o!LPt@ zS5$%Ys_BNbz@`;;pL~sbR{mC`dazh+O2Q8Io$AY{mXnNjy+HMUOY(|oj>A?J^?1d8 z7CIh!DB6wTxrwxU+qs_F0{E!16ubymv5ST%X@F5d#_;{BrE`U>q2Oaz6W>!Cza?YJ zUk;gM$Stn!kAtKvq-&y={n&B#Q-sZOTF(X(lrhD(bXICS;ce016gMf2HE`gS_-m0> z-YI`AyN7ZrIM4ZMD?ZDmIGtJg+;>TX$9Y-F1WM89gEzqIuLnH?o=VzX^mkM|*=I!P zh5(Fup+e-Eo(hcDKYBI@6)U06ZbU>pR7m`n_S7DVR}V{cUor4*H@jWOd`6hKktT#Q zH<|d~5bIxfurrIzfx`43`G)p>!w50`*xU>|(c|zx=s23Y@n)yD+aQ-5NHbL_U2_%N z#;%RmQEEGkAhmlZ31g+jPvXAH#%nQJ34p6&z?(~&?DjvqOSm<@^$MOg6K?->o-|nO zSudxtJhdio$FZG88!Hnk*Yd9D6sw;K+#8J-n$WwB;$&^gS~9PKxj46x^=~fq zL|^ii$YY)yzz1Mg#3_yv886r&McA{wXJysmbC0Azu5SN%QFZtl>&Vyr(YC>Ju;55K z$Qp{^X3vXOi5ChXmNWDy6+qmM-s98IA3`tF{=_fm z42r}@lGQB&CE(JU6_P=RGClG#8RE6+5J2*nxC;W&$i*ttz45wCwreHP%ul)0Cm_%c zw6VROJHt!To|xH$+8Tz3RRVB1J7$mG&dtR+{?e)x(ZVK!vZHw5tFEYC-F)hN3AJIb zhzcq*&sBujMj^ADkGO`4L8aMFTD?_$%U-fa2h-`9p!svU`!2&z@oFL+wbc>!r_QCu z3)1DWj+HlK^?ISyU}z7hu0cOer+WET>SMs`l9h8CzX+dM^DEgiq5}|l#^}46z!O=S z|EhH)cU%!4-PTHflmGIxBO0#PDqf;}!p-ZwJnD+-usWD*plCe)4kJ~PhfzhdrN7N~ zDAb#k41C(26VgrAc}yC1iE~5@j%r`zh6Vc8J1i}?Tq?FDo;4doa>zk2S~3j`l%yi4DmBUg3b(RnRWG_Xx1TH4co1K}vd6R+!K+hG zV}9?K*6z*bLR7&Mt%pd-j5}bK9X__*q8DMXnfp$p=1uq49toiCM$pmjkbX?XQ9NHt zP`7gS_qsQ%u4x;|IP}iDmR7DT8%e+lhw%1q<-wdp{8V`=Jw@*%!VOc++Rb;vIxpP0 z?u699O!=t&#HL8!R_c>Rm4E@vKcUc9qh(30x>*_@;z0U{boa7H#xfV6MM3yK?l5wF z+Po`>Nl}Z-FdIN%SS}F83ZaAIDa%WQ12qlsm&5aROwTpRq6Ngr_E><3ym22&%6ykp?Iq4S!P{&%@;|%)h^?b}wxbnBe<9T&D_|Sw_Y$kuq z#YXtCc$$6AZiw03`wS9eT)wA#75qI3U3wTL+XYN|hg$(QyPNea?8m#v+(w_-qJ&>h zAHKA-^yx5hJX47;o#OgR4iH$@kMVjpCP<>jx-onKv?%Ow`>MT3)O;uilB0yQAcP6y z)6#-_1|VxjQ4GA+s2RqKyEkF@CC0v%4gL)K0(j&9inCr`{OR@wzMV$GE;wPyy!CEX z%WC$_Xm|i`bgBY$+MpU?33^Aj)d3?)QN| z7O~9px8yaLlsxf54AJfCxpy38MaFXBg~ET9(EA3uKmX0(NDL{%l5|!?tuFcxB_9>R zGsWZBI)GFqaO}6I=?!7sr^-0edQjWSR_LVhybJ)YB*-TDY4zD;@;9d0w@b_0eeJ7a zZF`C?;;p;$ifC#qM07QmiT!kZ7Mv7$B=uO4!Ed!^^i@Wx)lR7Su`DvAVisk;9DlVo2@fl+G-yY1mKQ=#%By{asq#ExSl-QO0#EE;hBFe!167mV&uC z7DHjRBrOo?Z6vM)M)gv|Tu44L&py5#Gzz@n;KY3Ov8;rgb}`!r%kn^bHN8LLPAP90*@LbI=+Ob@Ka;0u^;J$}dpWo|Ae?m`*|59g1{Y~^ z#0 zInyVA*_hmw{CtnJ_L|k&&#ZEE08qLb>f9hS`7thwX?L-YmQe%u${cOPd1zCqOXC0; zs$*G;Dn)Gl%$GU*fA-{w$;wm#GWzOz&;BEdeu3<+y>)4djI3H>Le)m0w8Xct6_ENod7%i7u! zSf?HSwT10p%vKEMvoURwLEL0Z=M;b^ozZ}L&*UR0h%m5u@avmc-y?TK6_Re$Ke{H5 z8my)e2LAJ1{o*p5wh@;!_Qa{_#<=~<5-D8>iuuO zd8-Iqgl8}7awJF%1x~;kSpRD?owkrywkJm1;4UDt4Vw@Q0c%i@yN|xWfcJTM$~Ble zfy>}hIGM=+3WIyr6nyA$VOL>2pUZxcjKKAe|+Z&2L8r ziLljg9s9#53CW`E;bLACMWm5+*nTkAbgt!v2n2r=Ta_cF?{VQg7V{{1|MFim9PV@V ztk~Hpx%M$8%un%VCf;vondgkS&0bHpx*U~D1jp@+u)^8BI5JOQ1V-L9ZpjcVQN6mc zA#z9zyWPxw9^s?`8fXufizJ%HUdbcc7}YinTNC~k46X_5>8u5mifH-}RaInYGm-ec zZ>q(x!(UT7O*q6GL$+4Cn+W20DL2~=(e8J>^oNTnyDGs{cJc22={NEfy? zm#pwqo!ea9M|Ov6puin6VwL%M*S+l;4b{wPp)qYPS-8YFbLDk)0HgPT*|Cw8z}W8dk{q z-L?Am`NRK1+&&OJDJ$s&_F{45%(~V*!Hv7$jLe;kD2MbjMY7YF8t5+vw{rl zRr6BR4B-ty65h@$(il)8aUVV(iH3JUNl&Bh!q{QKyl2Ax!4d~T)cVRi3U=l>VF(!* zox6^G^tiD`V@STsiRNFhG@K-m^TqQl9QeBMg$N)_aAi{1(}C8ikrs4k+FD2+LJL)? zGNPmyo@RvcgO5z5@|9<1dO|UvZRDXk&L!r*&ucyN^#0AwLS=#H`~#jZEnsqdb{gqN zvd$Y)qXHS2u`sYuQ-|7yN}} za<4*!#DH>(k*xsf^9iJLYuM_D{68c==@V&A*llGMFxT5l3%tEmKc^0;b2Z&lKbxLow&(0ELu?T z*{n|T8~@AQLx!IQ^7#VxR#EI%M~1As*602w&q_g>#{B5wC#a?6Z`_aE6K?-kUo7JM z^0nXUr$jBm8$Ny2Q^YNu?jPyDwCpMZ4C>S_aypnG1~AU(B$qw8*CWrRTew;naducvFaCxTe*i}|o97Fa{IJz2 z4}vfCTWC#PW>Ju3?M<_@lW$8+RY`q9FQdZq)#@gFHLXoIyKyt<@2-A3Frc84eRFz!UV?wd#HP??2NULk&C2fw17s#_6`w zK7ZdezMre72z{A!nQ53;N4lJs_eKr{pHtW@u-GJ#DI2%_RVWw|S=~7v5YngfQEPld zeuKf?B8Nmhd;T&s1bE-q$fb|n{*(X>kATQ$^aZT#I=cvtcZ)2UM29ZIO;R(1vO8F7 zFfM?vvj%CIhHVcZwUfDbO5 zDRk9Je-gK=dWSt|oA3aW-p^4#mZ?MLk&0eTTN{u}8z$VrfwaKI?ZMRv&bSY6SzVeE z0iJ6{D)!&Di|VhOQe8apZ~Q28Ub57k+o)amDazVL!PI6ds{LQWM2>$- z4v6NVfBYrA01y@z_?VBp_jO`~A(Nqzh5~!c;Z|5oDJ%87&*9}mkgf3V~~U%~kKDTX6^anl7Eax|KH2r0$J&W)VIH_mZ~ zs|gZ-wZ#IRD#aV>OJ&BuWi(=?gLH>ujt_*EB*P03I;^&IVaYrX6&Bh2!O^fXFSOV^Ufmm-%w{9eu7E%mXZ4v8EvJB2{0EyV4TRy z4ku1D6_w0^I4VuGBic<`jY{f&CdOz9i5-BadExAA!pm2`Oi5sa>Iq@sly#0joz4u- z8=u+DV^*7nFPh%IQSBAQ@7iH?M+Td&M!}K=j{~?7sPxg3~zCSTopQ$$^;x?j>7#&E*acJnHEjV*W)UEoFNIkD9yC4lRySsyj#nYivDLMzI!t7^YvbbUa z%6{{bMG@p7^6Mr1tUC|NGU5a8$5PT=uRP@YZpCq>APaS{Mx6!>?E$6!u`c2`M_3|K zd{F8Gh*lx?TK(YFL-~LId=UVz7K??&)3hwqW{Mx6Pf%9djP+G5v;UOF7scKZ3{rir zUro_gw1zF+KzgD3{Kz)#a~sxQa_+`EBG~x(CSx}I6rc>D%l=lrojv>$p!cgLNuC0i zf>T5 zT>Z{Gra&6*f!Ln~TmENS>EMV*R!{e^ZYp$*Bc8Nx>n047k{M#8+Ay+;KuUV)%^5_YPag zi9lm}F9U@w%de&NfGUfpoUA)c5-9ee=3_$>*hCY8jqxNG zulQbOry=GAkFOE+VDcf;k_O@3pr`=UToks7fw&-Ti~k57znRafpjE{hZnmf0acKnq z-|C3^xED#DGXTTOknbF|XtW zj;~tDu%o6-NgS4@!e^US9j?|yYrwSMK9E!4&kp}Xm-y+bu1K?AMe63wo&koS#No2- zJa))Z8KkS8NMXb8y>XBF-~+@mF3uQV_^W5lFYrl6ys#cjIG*;^{bqI^)Yc5<77jh> zE19IzL%?A_Ou>ZAOYr5VOmsS)m~gqVx8GPzXsy0JKkeDhF8bC5hYrd81sRX;`_so| z<@~mSK|K`Cj>Z7Eo8bBGyyql-D#O#nd!q)$#o_I0<+Hs44Z#joT_2@XA4Y(9VI|$M z_Wu7N>pI}6djJ11vPUFbdt7^O%FdQqc8E(x_8xIbqFg&pW$!X7DoR#`jO>;qB?>7O zsZ{)*d))6o?(e>Oy*l3K^E~HyKKt`|4wpq4T7$Ie>AN6aL%Dax%p!in`^v5llpKl| z#G;S*Ea~TK7L#%+KFIV74Sv)t*>f{_A(SvhW>WKgQ6T7K} z|BYF6n&NXcMF^VXCH{@sXhrv&?XN3mINxBBUj!wfFYjrh8Vy&x7xQo{uFhVS*>BIjzO^WK zgQXuom%({qUEe5UYmt8CK^StN2 zS^Il3-u3?8PJ8!WWc0Up;S<4@?OR-%Tfg-umX|&-^3)$aa%&YU{diqRsKwv8d5Y5a z$H?aOPc^4lQfh4OZH{289jO}vroB{kw{oi{X{w|m{yhGT-Fmm##vEg{hP}N%T(FMh z%969#fi&`*Egt@@gMGJ#uKC9+&s*CXc4F`k{M0;-iNht3}Ixa*N+hs@SH+R_`kFA4(4v zo7-Ob*a_nNYFDW2c=aaGQz7K7a(vM*FO%gAH8?r5w~G&HPP&wi(i=3@NKuGR&ZXb6 zZF+ghtjTbs)agul4R;KB@{R3LT8Dhyh3ZKD9Dkm#3nx}IyL<)>qnf@-IMhbhg+CXH zWngKYHd?_&&yq|qukhLOHgW0gvF;$pTx~fg;%xmLzlV)1gu$zrv zeCnVx$C8Exo&P*X%I`4{_JZPNIu){zai zC(P_KqkQL1=}Tq#nWqjcynnAeStvLE)s7!RV`rx+)y~#m%TvT>qcu!2PJA48fr4 z6&L1$mP{a>JViUZzt}*p17^)^qG3td%RXr&Cd$zb8+(dA*H~hO3g}o``vIr=p(;a$ z!(-QdFY7*Y^qULI=h0FXkT0i-je=n3pw%@~^Lb zuAHoV^o=WVRkyQSH$?tiWY`bXZ5fOF$v)4HgmJ4F6HLhbpiBPI*)NlGtK?Ar+uH_>YB5j&{A1^D{bUnZ{qIb z;Yr%%akJok^TC5!u^0TFFf9lt&iN!U7%4y3dgJlhR(vNDuQ5A2r~chLX*Lr`&(+#v z&pwF_r?=ne1+V8TqWB#QOP$Db`g*hWf>nxuE`f8<&rJBHP@B75(DUsir3#K z;98nxSM}?Bb6DbVcB z3_7bOlEQwlYvFBgkFBD9Z{KGsoGd0wPZ!5(G_o)1`{Li4na)Z^YQ)~M(Im7U^_2IN zKlC`LdkHO&H+sGyF=YI1Y9rph;joaB$x}o5n?Eh!n>`ox&qIosz>58$awC1wU$As% zt@zG=^0i0D?Qvt}ob;}GK5M+eOq#`hGS!~LK@XA@i3D#IJTrqk0=Y!PDzYUn*JH}o zR9@EdkB2%{cA7sr-e$^ozRf75^7?|Okjlq`LZ!e`S=;ZHtPam(Mcc1lwykSojS;L} z>!mTmz2`6$q-RZ7qVfM`CM$jhsuhU`)GCvCj<2cJzG5%Z zWXK5WrF+`XzwZedZnL^O!p`E^qN|$W@wNuOb8RxTl`F=nP1%DIHf*SDMWgZpb!?8o zIvTpTDV+EDcU8?zhnSyYmh6H11_V|n4lSk}Vfd98Q?9=eEY?*vg-gy(5+^ZLZY_9K zi4~!goxYrR;FAxOJ#;GX+o8^;KfHO_9D7v5P6FFZflOz@98zm93=KAwOg~*bD3hhH z5-XXpd|z9!JtZ&i#eQEWmAngPt@Btxo{Ez8RmjMW^Bu~x_GH<|O^djiqWGWU?!m0K zjjGMfq~1+$S58*_#^y9Qs!x0DRrep6Wj}QOiD}tw#gA(@8M3-jM+JQRj#3|walG9o zSLHqK)d+Ng8l8R1mlj=ca<1GyEuhIL;sYuy)^hEZR%RumOcCon$M|cHYni98{=-2r z@Bq7a{2F_ocW8?4rqHnn8>h|@Dx(9W)3RCW{u3nq?>pK~t%v1zC}=)d>;+!hNf6f& zDw$j?IX;mtRU9BeC2+4tFvD-Tip8cyVR2tLup_dZnszn5xGSTB*W~nLE{rj;AJWg# zJ4-`bIpXxxwbplHq|#m;1Kzsbll^NkwW9NO!_|Vq#QRL_fl@{SfkUK=I_}|4x8B?E zPt=qpKA>Ve_r_@%gLt=B95w!x~(5IT|jK-+v8w;$OfMyHZul(TrpJ~?KxVrN3TEX&RTSvt=qf)&O z`tGkJ2yuRDHCS-i$QDVf;iNlVGvvUf;djS{C3h_sEm+7T8x~@8>kEYGK9ZMTE`09(LYYiST=%Lv~ ziX^_AZspm&-VN6Q4;h65QS_J;@Yd_p_t&Bhx3@Wdcm8I!p{{7jZpAK|Mt)rVg5Nhd zEswc%IF%=cVp;&pqVZ`|aB<%!bHD3)dBu-_lRFoYr6>H7)o8`a^T<_wx7v}sV^@kC zD_5Y`Rq`9pc{M1;hhCSBTHI-vyTR&|C$6zYAGFYnahtp1)Fq#9qYGOHjEmeTzVBeY z$I4H~GkZQ9qcna3*Y#JvKm@M$sFBUL4UxxmyUkYZ!)53OBru@`lP&sjaxuuvEXFl zp%xUaAg4cxY35Z1)T7#yH?PGfq76aQszFj zrn4KFtZSFaQ93^w}*`;E1(rm;NxXTq2aHc?!c z`~`i|K^_y=ME2=v56K3};zrW1r~7C;y2oTDeA)hn`Gi-! z%6d4k9P8^efJ?h7Sv;oR&Nr@V$W=2uRqg7*nEb>GC6wmQfq9{oZ%ErgqFN!kQ7&gA zc2vYOH}vL+Tz0@8%FKj3<4o$cDm$U|4dn{=TtV4FXg!t(f2zhiGcvlO(sY;y z&#@=2)d`)IOuBB}ek3GcQ!Udz4E%9}KBawoheQugVof@WqvZ$hUhN89IDv7iH>!FR zl7B1(YaDD_E{$$vb+P1dj*XW6Th410UNt!~EdRL#;%a?r&wlr#$Z?e2{k6Xl8wv6c zP&1YyDbtWb7rRQOUyASzi;^2aT{HKTzxXc7YOJ+?^a(r@5}^w+4@M(_4=L`B24-#IeQ+82|Aq7Of_`udpeJ1)1idF!oFlvgi>A|}zJCo69( z!QC%WhDIn2Cwo;$w!Bh@dFmHW;#wQ$s?PGj+V|5v6AgQG(9chFXQ#*2J~8pJs`ZR1 z2fmaZq}^s9?e5?Zx}0uw{gyZOYgm%b-n&gFy2tG3{ja`^5o%styWrF1R?j8i=J9Fo zjY4#Jx@E3U%+Kcv?81qnm-Q3{7OC&}3YuP05~D>}W!&=Ja>I#B*LpE9NL%4`@%}@v zUnP`twq6<@ugRxWe3-TW5FNc}Omf+;IqOQsaKS?GXN>s2pJ9+S_z?U8JF69Y(JBE7 zQst&%>22McS#_OU&&GKASXHO?$np9;38GExK}Ip}Ckj+%V`F9~5~?{v-Hl#OB)BUM z^|v+@^dHbT!6I6CmfE8+VzCq#b8hPH!jk|vxaDTesF^{N{aZasPyfVzlN!dEj4u1h zJ;tY|PC_9A$0UlZY9G&{bg)`7sn2fn1g%-lbX=@S`4uB8*sWs1|F)e+PwTZH&233N zq4AL*N}6eVbXwu+S4;DyN!hWGZ}n4?Oi*aP?0ii8b0;ozI$*1PZ;(GOKZCkEA^dN zQNiIRyVXLLy@qe}9NW;WzNo~tYB4z7vg(-2C7h}VpB#seWcsb6(1~NREzWf30ZOdB0hd?pW8_C}TrJ8j_CzFV{00@gHdhpx`@{OgnOr0h7Z6itHPT9RH4=+N zISg*6%{Q?>0hS>xUNPfb-Kl0+T0oZ5Cl*FqS(DfoQzJe$&vG7EAt)63$*JuPel7K! z=o_-Qer_Ixv!~nJGhpY07IbeHJuJ4=L2It{gT^?lz;N9D)q#Y?6p?~+wF4dnK-!~& z{53+1vIf)5@#GrVi^0YzLb9y)b(rg3D3hYF@F4YcpZlfIhC)wSU2|=gdnUsI4j-0& z4@c$Q7E+d1O?=3AzNAizZ!yxr=$HOdq}m4^vg81{9R1HtUo1DGyf-p`=5)lK{E7=6 zr4_)uNv$Y}yOL%+TqXgs1lrSm(J4%imh2;17E$|HM?M}k&}lPW4EDfaZ?`1-o$0q% zz>?EUyMUt0EkXWUy{B4#|EDl=gAx?F5&es>U=R(vG!iD>zL z4@#~$Mwh&*oY09XnV+P|0WvxI%I`ETbgbMsn)0x3v49~TNo_t+(0UX~_+n`)?iu(6 z+QdkTxyuR27|yTaa+UyRGFEifABF%p7nHo7yBNNq)|EY zVX`HD=(h|T?fFhOtgDjhZt9#?Im0WsF~WY0c|`REiE3DGqijg_;V$`%%4cRmtm(%( z22@Fy8W&Dv_B0-vUL+o{4 zWgNNlRX^IMf8O-hSl`-Prkn+e%*saVS0s-`&kBB5Y(JL~)T$$s^0Xaw9JgxJ($bPX zerV4#oC!r%kG&@MIZRCsbU9ZwS0n-1~W|KIfh2jdR{mzHuTBg0PESvG;-s^ zote+?e7tx$(>) z?=NZcSB5glZyXvITwHFJ^hP=xRObqg(vuojwpH&LFYw_v5gTm2e2S?@8KW6`*h6vh zUS@*gD?w6?s!DnN2IVEk${O&86_Bh5{55e&Oj-Q~wk}%bOwm->O+)qJre8lvZafV= zQ}f|eT9tQ1o`a41JsY)Xy2y)Rt6DKsXr@0G@86l4b+lcaSz;Pa{i~|BY?4M|fUP^U zu3gZm@`ef*$&Svp^Gd`C+1ovz4K+9dBsD9M>MkLZhURP&pHIJBgALqrQlCBss;Z&c zh1{?sQctZft+8i%$qFxNvs|h@h;AR)2$~vR_Sp!IH7uPX%P~?4r>)G)cApxs_E!*I zPJF4Tt4g^$Tfz z8#dh$p7*y5`rH-!1hK)DX1aGN!~nAcCYYGomWu4tqzOR zQ3tdJi-5jVm;y`k;mot-41#>j)Pi!^300KM17%O*dp{4SV!h7XYU5)b;Rwc+dESw+ zlAP!)E547iJ}s(TXpf#OT{=4aDGE5Tp~0ecr3dWXX$xCYtor7)Nfkk@tbA$Tr5FZY zWbBI(Tbo#%SUXUgfX`7e_dHyH!uzT${}B8a30kLeJmlSKFg2eDL<*i>Hm` z23sifm^dFLmQTaGt$liUSpIymDyiTxE_Aki;~se$R9f}I%eBo3riJ$jXxqLha(Q{> zwYHUH75!m4`W*Hlh5X(SRnm*00|wWJ$DOYBDC8e;*{k8M@TRYK^Ly|&<%+OXs+y^9 zAvMnFvQ1Yr>+JOFv^*ZGY9s~FpD&L1kiC{$>AO`hT8GsdKY1yNVw#UdKO_49`rU7E zn(r18z{JQh+``c3?y64ddGzS$VA-Z$4EYNMb~5t4J>uekF~^@vZPthM5!woMJ49jBB{NAgLz3<5c*1^@bVjbr3` z^nUCs$Ejc!Q8-n)z53;{4E<_#ZfjMeBja#VqHYU&f4QL|_#!?2im+*HU#!oqKC0Rt z#n#D#-}(&9$h|J)iE75NI##k#e5ErGA=hiX%*@)aw&xm7^tyhYW)?6i4@q3{o=E$R z9Du}VLyJ?5S2@Hyy^yV#lS$gO_S4s*gTq>Ef>DE%i6shiS4(OtRV#IYkZ4q+3IW{skyQ>#0D#4eji&6S&5aFTQNa%P;#ZsELvQwwgn z*E)QWfiYK-X{jm8jdgb=AF9x>gO) z$1E`%A8ZKM^*UGrMD(L>gU!YP_M8QS%*t#QR;b#pgPY+`gntZ58>BPjIYwWdXe)UaPd?2e zec89>>4r4W`@U*2R+UsO-NH%_#c!bh9yct-r;B~T;*3?U&oJlH`!;m(LbBaCrkA**(Jcz6bIq{%s}3&0Bv4Dv6&0}RF*-cnh7_m;%0Wv)BR zuZTq7bw094RzEwwtXxpmb^{cFAD#F#^h9r8y*~afiBeTibzv^6?+r)fd#32!GV*9LHkpV@0^jn4DlByYTw{+7a%Cv!MmRiJMbov2&YAriUp* zhdVDA`gg|1AGx~5KdP{xTqYWFF!PZ7cv0l6dQH=l)S3d?)AsqRB!;dp&cD?vC@_w( z`JwG58CWLS^Z*n}Uz47l+R86hmVdDLzKtscJNE{vD6rnB8(j&_86r(~V;B&i(72G@ zqqzL%JnrsouTd#oE6JjM0TloFjxGO>Ke6)V`?ZdTlCo*VvrC@+O2!)ZiX}#=dx;~P zX(R#Ndk1AI_)Zv_7)+|w$J9D+$xW?ovgLr3t1{cV3_3h>kIga7c!S;dYgn4j-pSj% z*x)s}utvXoH&=0=Vn&YRO0`)~+T1yfPsSbV^f!ca1%p@}U6`G`(zRoL-K@T5Q>2*+ zy0DIW^~6ilReLwAq~YoEmC6GO9ly3-g$oqzQ0ZPtbNO; zVM&%Ocbi7}7pYfr%b9Z5z7+LL41rR(J+6B!wBveD(A5pa3fnTw=#Y*T`soxuR&D>^ zYgP42Z*AY;x;zeJ!sH))^LEyPYAi-QMIs*3i=#LN5*}WxGZawc({lP3f zs8vHICC`xi_?pR=PbTq-CyMrges(uQN+o5TheJec zSu5@UHsK+agZ=}fC*sE!&6<~+7yB706)P?|%2g&Zh;GPfM7P)LZPbopXBVqa^MxD; z?3R1*=j52#S+aOeEBdKRi%GN2;?tiQdC6%1@E%z(PHbxRNglov`jUC!Y$7^mk9Q(Y z{EmwM+1pIRKa~%t)&KkiRg_S(K8zk(Q_x0EH?zs^3uah7Z&-=M_8WZ&B5zgVJC_&4 zndlK}aLv}a*X07fM{yrJF)W!Ocf-}$rm3Lb=2;()QDK=zPH*oz^q#9)^6;d>_a(oW zb=8W7*KYC;*tDXk*3Ni7F69-=F7Xk;E5r(YsqtAjtXYYmfR$F3|N|&9QIu zCm*+H35Rpnj=Z8&oX+2OD5IHPbfdoNX}SDhmGAhzV3HKM$a811v5Tf%^2{V34C)M? zsL73YxrNDR%jVNAG_L)PmkLx7{_7}O~*=QU-MqjcPU93 z&rPjd;9d@xNO}c)Di!#4dVv&=Fx9` zyIZ=~c|4b=3?*BiVuI0EDasemN|f2Ak9iJ<(B!a3V0^lzpou^Ohx4DBx00u8!+UMw zn9>4%*mK<#*i*j9pHU|IO27B}n~W~1U~*%0w_9Q%`YiU^$7VI9DAMGcIMOEX+0)76 zKiHDn@=&zL(`u$b{d{&d6*HF@=`I=n`eJd3OZV@KeHTZk#X?`%<)25t zfI#~5LyJz>P~XOEv*#DrZhLM=V4k9s@q*<5yMZEkyD9UC#ozDb(#L`_=d+tR?=M;< zMZDgc@_Z%v9)-I|vR7Z1f}x)ZZThQu=%TnPsmO(8p+@^}RF!P`id7d+Su`u-k88NB z4}XIy0@p73s`;sYw8;)t^5Yw$2mLrs4e0R;tcUY*y30^?=C}ws$V)hAF`UWHK$-Y3JkEZ4}MP-V$tIt5ybcR_1${axAGubPDoMpf(u?552s zUGMU~RDoQJ6g1~CR-4#{T8Eg0e`&Sy&-*Oy_wok&M|7vxx6r@Ug~vZ_zF{)IrztEe z%_oc6W6R)eaPzkNi*&NHR#x-3$KE?GM6Qfm+)<;LW@phizoUkZvvH+o^Nv8N7(`KE z%oz2uh1w70(8psnV)L<@?p&i`81v;@SIN#>@f^MW%tX^n#`7Zz_nmZa&(ax3v_`Pb zLNzODK7PBWdY2ZoCS%REW)>gf&X;9%$EIj=VAB~6Yne@GS@c#FU~$Tu@HvG3va^Bc{NaaPxXwHD*0U4AS+>pnB5>JQOQ>J?jS zr;R?S&8q&APe0~&EyP5elwta~B(D0gs-y<1qqv6Hy*0};LD|_-a4>S(kxwJseIcJn>TS#GYAD(9jkg=gZ?;u{9jEo#$}#SI*cuyoKoq+ zyJ^c;uM2A!-)D5OFP=urKL%Nkyaw0(`ZO~qwpgo5-bO9q5aDN$JR}7!kH|O9R$ocq z6lh(1hfAv`O9@b8HCR_6%g^=*n%-)9iKC$@zE9-F&TbGr(UAFZ++CFE-4zWB{tZAF4@;W10$i-Z)+NBx{ zCts?uxFJ=%Kf3X>_kw5F*mLY(3tQ~RaJVCU4u!kTyI0>fp266agC2gtm65NEO499i zm(0!R&hBB>o5-BAsg~PUrfh8?e?AWsaPy#m``SijUea{i@khIDQK;1I8d+g~OV&%b zqea_uvf8HmrV0;MNG1mCH4^xKMl!3>@J`KxR)X;+dbz;I*CKkFN3)SE|Hy@a; z-D`YHe{18T?o#1FN0M`L?!DtL+-^Z9o=mU}R{4D_r03{zdwg2Jt^P*Gqj5XVYDbsU zh^eYaN~Fn+O9@SV0}l@^g1>qVvwl%uxQc{gSv~eAPA8 zvbrP|*4x&0xFxDOGZAIe@VxkP>L7LvA2iO!5cDfkJ4?j=JR4Y3!+FU*OVwscTX8~v z;7HZ|V=A3&F5`hEMcRZhlxH4}M^zVA!o?>Sldl+%^h~l zJXaX7I4pR){m9|tM~D2@BSVY5}U)-7mSIz^geRGz(O++rg2`y@Ip5_4uEJz8y!e2AoX>iA#2@d~Squ1gg$ z{b#11@))`Dns;{mjQDyWE?jjMb@Gr*YCWAHm&Td^|Mb!q*Ru$ z`!8jd-+j!!j8#tx*n3_e#eh5Kwc=E()y5}F8l}2xUzjq-j;^Rf;~t>ezhbjR^6;f+ zxN?!Ec{6w8LUm?OHiz9_Gv!lPn{#RNG|~V6Uc>^W%zV5|>*54%b^!EH*!l&$WHc@` zK3BcEVYSd~G_0R`pLjDR(?EKJ&9?Aq}<-wEv*s`VjBG6ey`4B zgXyX^IO_ArJ}t#VW45`X^?9&X{%Nw`XRWQsts2M01JP6jbd+#VU|7~-%+IRj-#SFK^p9PZ(;afLbr#~Hj+Bg3(>HAFG zx1<+X`p$*S66vi!-`+p1an;=1_&fCRZJet&zvTBC*C`qr^EvBE18 zzxC(W1U#tn@XXSDTAGU1pZim;GSXUczt%r|V1w5cT;evqynSx^g-vFr^XHe|t-D+8 zQ!3Ey0+Rtstw}9|k*`Vbzf9D~bha&&Z1v1vFVS?;{J98izBs9#%DYDS_#We{txwG* z462_fwf_G382kIiBU^)oq>|;Cj=12j>o2C;mJ1$cYJObl+}h0CqQt+Nse-Ai{VNJV ziFG94%S=c}Ss)gOii!%te@)3KJH{CQ_9e`P!W>2}PNFa-$i*EL#tgZj;vgV490a85 zzl-l27)yl4h?8*ZA}0a)$cZsUZmDr$%#n-pTo^0l;x!lMC~~31jWI$l61WM(!~Y>D z9s=UULwNcv9>OEYc`=5_D05!ItpZ*G@ggtbSqJzCGbi&AZcY4m!Ou^i3E?Mf`943! z0-12100D6qARxB{2*XJQ38Rh(5;#^ONFe?!NT5+i6KK-Wgr!cS3EYqsB8)mEL>M(F zL>Pq1Ngn5>v3G?X55a!8|AEJ9u!Xvblz?65M!N-&^O2`@|Z=S!h zNe)3XOb{frbBWM1Mz~Q4qkvFl#w!c&k$|8U3Q`Cd{f>{wemoT?%&QEZiMM$T{KaW) z8kkX=hVS2l&*Nb&BO3UzAt3tyEx*LWx3M(v=d(1du-1DFJ2Huw3V_{G5LoCRbu1np zZlQslS_pHC;`ywCs=~3@LJ;Es86>b{Z4gA$MFX7-i;0$1fP;83qWpMju6w42aX?bS zToA;+i#mXn7XH1TRsdPG1fEv6E*)|a2XtJd5PBEw0UlcDaA1hX5w~#vXjlh@5kVGy zR~7Jg$q43G!|a2LBrxo}_-Sgi$gM0$A!v~vg7|h#QwsB`VPp^$0kC%e0@&vOMiqI&=3kvLbMWmUr6Cxa$B$3fb`& z{3y>m@cjcA7TASKdWSx19R%w79d$Xg0`gp^6pXtq*vAs! z?rt65I7|oY7|{v;)6)TUpkftA5SW9=KKV4jRx`t34Gn^U2H*iG4o=g+$RW(=!~+6N zu(T$I18x{2FqTOZpcx%_bXzJCH5rFo!RD@V5^s)jmJT+brV~UKge+eAYpQMy_|`C& zy~JB=UPNfw;McBT%|Op!YAx`f8~m`a7DgTcobZ6UFdU_YQ9^(lc;Jx^JfwvYM}Q3g zP?uTKL%vaR@`|t<7e*N2EZi#9oxKNwUIM?syG!=ivv8v}WkwR5 z4&A|-ZZTlwmZT7{(H$SQZaft?yjPdN7-?`ps_+>$)x}66+m6BCdA~*vOMRgi_~&5y z0Zj7>#Q^yR2DpU=!lipXgtzTTZ*1X-ECiu}vF$d_GlC58AP>W~`$cGv9>SJa0qH&j z(%sFvt4A5&FBS~jZV{nfTdt280(;2*LCm{?V+bwFKQ185mbrZGoDrD(Fz{ZxC%c+zdT7<;_<;shov1FPlR!9(CqAHbb@1Wo^<2N-y# z9}lp?+%z8B`lh1~xcHZh5q8xl$S)I*PVM&5ts*pG)pqY-!??B9&xMA+6J!y{%37G3i{i%#iggoisB`H?Ba z@y_@5$+)XW0E=D5Nr*%z@t6?`@WBN7c?NjFV~;T+$lMx|--9QCx4^43a6UUeBi|We z&7X{{aC?;Ywj)LceEae9sj>{<-U||4Iok@rI0OfA+`mq}$Qx#>K_bFCb`asuC}Bu^GN@Oi+tA#y~tGJ$qr< zCa`ipE`qq_On`I?1z~d&LZXs@2YMv&z_zscd(*Xf|1ybED z*a9kMDAdz4(mUEW-x(u>h*s0=N^=QtCn;pa?&LcYGptU}yhF6ghI=9pQ9;lMH?hUf z>%yaEz~Z$vnYYyu+1+XSb(-5CCOS+IXG7tpc=~O#A24=)wE}q03}8-Fb+)61-(WaOu*P;Bj9x zU{gzsj4)m#w9C0(o?w-!tPlh=Z09FzALJJ4?G87}Vg!Zow0u{)w%!4~Y4amaO|C^F zv@k!65kWTpF*!2d2XM~pe>ewDu4SwUoI7p>R&${m53s_UreI&-F>oUuJ@5=3w!%mt zz#jlms!Z*Jf@9?1AYTXWf3e8K8pNV~-}XU4ZUJ7=(eVAV1m%H_d{n=q2jVR~v4G?M z?1S5X?Ay+-CGq=OS9o>iJ2}WQfVup&)@9lDW=ML>ks`h+Ob0=3a>RKIt1S!U3nFNMREV1o>_+3Ut@qa-oo(<3 z>)_8IA+lwhI}1GM%(5+Ygf$XJL1uFJ3=0(E7U3BJHy**Dkp-5WHuEpi2cGE|8Ik7B z;85ucsOW30*m~6{0I3$i9zsqPVjiX9lVF2ZVgz%79)*p zh|2q~hJ-W(Wqu^~^V7Qf;bo2eJ4(9-TcAJ=!SH}BLF<13fb3c{NXNqVZznRyoY`s) z_iaG7r2$;h?)3Rw6ENh){cQiL31q4ShTyYrYvh!rli zCv0!T9&GO!H9&svXMr^w!B2QQ;&lKQ5o)Y(*+EtoxJ{NI20uL9q>aEkip(}V9F@rm zzs+LZ53e{7sA=%Ceal1O9V~VNFe!Nl9OXzz>g(|UMGxHXh(W%FH{S`2b6;kKtv;~s zsBq2juaaf!0pZER)o=L_Q%nr}kuiwxD(t}YKpY6J}4`w*@$~0GTaCmD?G$WP=1_uSNMBS@O=UK_ipy~TEb=S z1o@1)gZ=$Fh6nb;op`0hs{lU+ph0=CCWb&3fCokk;WP}PX6OI_+3YY1=D&+#gJ<%L zckqnC1Ke|Xg52BTy4(OvTC@Sjdk`|y8+f{Ghy%uY0EPt4qqda;Vc^5Q04N-+z8@sj z;NOl5aC^JU&|pnG6*sK8LfF!EPw;fF0GRg#(CQ)-AtBcZ zX*rn;>H(6yBt*@%&M-XbwyGyyN;Dn@ntJzt{K(}@`2Goy;ZL)mccg(*rDlsXQV@iB zL_*|IZspky`0qT&4*x6Wjp3x=LvcdB(Qsf6p~1k&@!rH7sKu)l5+c>01ir|d zAoDITl(gIsp8gM@_W?kK4J__MPy%NFkcD61gty{3QU5~0bv&$c8G%LrMdZ@i+S8SQ zixnUu@Ag+q-7vo|AvuncTt9M?5rU2t5eLK918}e}Mgj2%5#_eeok5Hh02$D3-p#$_ zgbo|QHz+)|Q^xMmacgH#OywpK+bixh%y^Q(RPB@aB`<>|k8*PVD}m4B;g;{jZSyG`qz2CU3sB zFNkl47DJFD#0}q=ad@A*E;+g4#xZ!L1+}oyt zuxoCE-|i8R>I(1&{JZv1bq@X-2&(6zgAzNWnkOV>*((G=WdGxg?`7lZ<&jxM_v|%T z1wwH8pC~uc0%rvQUBS1i5mNJI{u~tz5d3M0)ns1>o^)GHrp-Bq6@gHmfbH*2J}&=; z<$^)RjPEKVlJOFKl{+O2K@2q{L~Uwbavu0?5QZIT6Ct#(qhghVNI{<*aA3C#%q4i> zyT1Xa@Fy7v?P@||@DGsP`uGsrD1$T)9KFfC!|T(A0QIt0h2ujoJn$PTo*i+*4S&nz zF#ZuEiOmw_(Tqwa~HQ*5}3okqv zO7Kvd03pp*gE_+pfO!}Iq7K0)!wAg_`kB^G)?m+X|EHv^PT+-^ta!KES;)RarB*Ms zSwqmtUNR!q8>Aw%AY0dE+)-<5hl8gbnS!0e3C5Oz2bdS(x^O~*I|BeRLq0xO>jCeM z-kU@OhLhGsln*lS4Ds+WI)Wtchy}%fJ5-PzALJW?@rHF0tx%&?6rnwu8_|Gfft&At3P%)ZTvhoT9rffBeBU|TyrN?~|jmjz2uO-|JLbeOe#po(#4SJ#X)7QMm5l|A&v^lx#S+rUM8=<~M?nq?jvk1HKPMG{ zM=JSuR3xh%h94e)UQ_rKu}(!$3cw^+`FB(#E{{l1ZD3i!z=QJbUZCj@XQRQnzZU~FH#iA#f#&v+_Uc=|D+)t;dDr)CZq z9=!{(PZkD^rp9=T48qFMc%K#;R|uN^L3~W*C?N=wUg_H{nO z1H@I&mSwaYQOd;NY;CZ~`uV2DI(iN`#=p zc8+q}4glGEXmb zYvO;xmx#yk7apdrF=oTJXDi?+=ErnU&;X}gP{6)qeJ`3(8 zTu1Khs8CRX2-{UUH@v+(ujQAAOp6Ia__CmBke%nvcO^CZp{ex5`nW*31`3^sbIg+f$&r+ zK_}?W0lvJb5P?f|L|Fbc3K5<;;O{xtBKLOi>?$7qMIs8TUlQ4VfdW}5+tdwiR&@v} z9UyKNw9<&ef6GL6yxn1P9%zn$p(u1XJkZer9&6NPN74#J$xl6=_ND?#E}cMZI{GI6 zjgWIB9O2n$P<+V(`)&lA-tAQjY(-&`wEseo+&in76A(22lGv@rxFBRZ>X@dvPq=sx zuHyfv_B{|e#85imv25W3^U-lM0aVIeUbzmOfSI= zcjXdFv#DILC%rTTmi*W1F^rB-ItAAF0xWR1mN?#ptu7E!tBm&L_+}86`cLj5(hZ>p zcq%rem4U43kYAByA6SzraM8Obl#-K#gYQYO!a+9)#W^ydG$wTIvbHvV1PYoHc z?feiPrTjYkpbf0{AXx2gBV`Ykgd)RzqvciqWz+Zbz?OMqBtg@Y5TY3K0dnq^Bz#<3 z5|s1*H3<-*JLB&ubRhS39CTa*Fsaf8JeW_I<2Rn}3%L}`og%rzwVT2q)+cL9L4KYg zQQ@Fs`2V9g5gQWcJs|72NJCsP#Oq7Jb&m+MAk0{O`i4^(#JHvZadi`6Qu#k5x1&8$ zLKe4NFTgjTD7uOD#U@q?vh(!ugsm(wVu-`YV}Itn0@88;P(kkI+iW#ldXZob!xzC; zxoY8$7YXLYbqQ3k8|_k1FbLal;xCL4A_eguKMzuYgsW75*t8wNFPY(KK`!-ekxc=pgGU#G?5NC2<|KdsI5FY8=k@&CyCQJrO zu)D3&t0)a?c1p3sD-*Um@_=5mE<-~-2%=>oBdP`#1S{1)81AkVZC=Gc>W8_q1 zVg3!md2)M%toIOz4fZ3%89w(}Y1o8HdPk;mHvT5%BjC?u7>SGZ1DB=Y1b%50oWLc$ zV}<$!XXoSqe=drX5cSZHlpq7Po3n_XY7_z~O}4_0g#?8>4*;_Cc4@d(i?9fU?j;^( z?vsYKOaT1<@3x8;0T?@iz-+K9{wI8r7zZv$-*3W~iwHU5WBi@V6f*Eq5upLXQw)$0 zLm9ZFUwYdsA|w6raHJUmZ>ItX+=+)P?PTDwN$DNUZ@Llyw>u*+3#^I%3CU5x1?h{^ zaC8abVGVeoJ_Q~q!E9FrhuSaj41)OZ04N@Mm#>@6gM&&zc=SI=2#~5zIxW4D9A1wJhxVACiSfjOb-yi&U8%?>DuUAEK=S`k}%^>?4!dWb?}j)5(>C z!I4~eV4JUq_OEyvAISoFN+9UX@6Lh`DayiS$P`6U*Loa*gK-!pAv&^|If2kh{7VCd@Ka>x$ig2h2+jmm z2@thQvTz!S?2aRMp)(&&P=n>ufUWN~UiLm&*jH8-)Qj6ytLsSmDd~D_x1mAZe7_scQ+x(^&NJ=gc z`%E8MIr!eiohxNZ+rxAe#F}gn#db&UW=A==u^MEAyUUGZ*UKzx0r8|g@#MA`WWe@| z3~Lv^)*lBw@$(|Y0<=h$gUde2?ywe_8nC@TnFtIH_LHr5WQJI9kF<9TF03JNd;m}U z>XjTUtuMEoTp=&Foc_8eiXSA4RN$q9-2wR_i#&t@wVIcgXNafAztm09+_|M4OBWZh}=HU5qVhi4q=Ii zrd{CXx|#u$Lh*l&KQ3YA;h?JoVV7P78w^iIkR9*QeFZRSct6ZgODM#3Y5~AL47=14 zUd)%suw%vmQAU9M@3xs&({N)gVfwfDVYv5rU_abtD!+r*a&_RzTD%IdMIC_{i$@HF z6=2sh^85e2TRe(~`Ro*6?Kb%xn#^Ah;P1x~m>r=;+=^d`)X)1s6(od-L!(O`{H7k5 zJ^t-zgj6$f&sd!nIR1P|92)&g@ub`D=nR<)JzfNHz8h?Ix8!`@z;X?Q_L3AyN7pLQ zh^hkO@}cq_o{9r5Y5?oS`{jH1i{&p0u+;yRbsca~99?_?8zPE@CMXz7Y=B6UCRLQ) zdp+(@5jeUEBC$kc7e5o8F*c&c3W`w?8!9#w1!9XPhy;67?8b)Qo7q)n*NeYj?*2P7 zJM-rCDMVW^>xPXqkAJy9|`NY{N% zucKvotx9L?*)v7s8)WKf=*o#Z?S3E1ccahzC5hJ~xnf@f&X;edG_Y9ogcKc3iKSor z>cCT^LOfbPvB4_sZ3QMuOFkD&=gqtvC+NPB75JBbW>|s*$5_GIa>2sa5#(xu6+A8% z-cYg9KIbg5&wOMb3|N^@ORg0-?-8nC z3S0UUM=x&exA|7+peFg^=8nK*IBq0FpdXin$Ec$Fr<^L?!#ZL)TcIIdK9rJpf#bV+{lLp-}t2b7FkI z*TvH-$76VKzoYaGmLaqP@AdYdn`zX9K7-j;G4h4E*3fX;syFza7Y19h4`=qj1r%oX z?LQ^(sb8(3`+mV>IP6Dc{&s7Kzi-79Tuk7sKds?oUu#`Bw*PYoN#H?^6lTI|(+VW5 z$_MbS5cF>$0&4G6ZD37>kX~#c$ev*~&{`p6(+m%wg+6F*!)4^Bnwz&LMyDXIW;xXc zH1}FFg12Wx{oCg#pzgTyRLn~~XWGESgVv1q{awQ*s}tzhnS8Zc5L{vdBb%(5%-b)I z;zs7-7UNNkQpr1w5$6_Z#h}~e}L=G#taYR!j<|MxaDEPtZSZod+gm}B*3y<>5_y>4_a2c zefz)p)FH)-kPaPC8;c#7M)NVyoNdz^`lktrbjrFNe|8KqL}DzPE8SlA`xsh*@#D%C z`gDGTTC)n(mblaXlgB{GAwlaj9Kz|0$fk&Py92{ZVD|KyjW}Kn6=@R%$H$-n6`II6 zj7_ASpoli?{%FJ4<>Ta8H9mXxQJ_B6ep*Kmo_e0bI`9M&xAcYeb90{%b+K%O^o2Sq zwlM36@WS1sc3U@!XhYk5{6$Qm%2E8{;A9I%M+F}CK}5Z?w=I{HW0IUjEeb8Unv@(f z#}*D86;$m*g7jTr3tg%NiEyk!#B+x&L{|y<%SDKE9aC=01t+B|Q`6y@w~#)+fe+NR zTWs;TO;V}}IL{91OMPTIrpH-1{e9i=7>!(Nk(?jef^x7eBN)enub93^Ml<+ogF~Z< z9cU!m@&ZSfIZwYowsJyVTZv7JHL-V; z9duh`YXGssg}n~jcDD9Df$o3#ZjAIr{C+cmmgNr&P*PSMM>4(1vIEl-=sbMU=2|BZ zF36`a?;`wDaq^u#@v1TI6ANeCZ+6gd0@ZF~xhtb~N1b1B@3JrM^jRYH6Bd-y3cT9w zS6Y9_9{D^Pl@I=7K4qWm;BPxS-pivzkh%BOT8krULZKHE!A{+tl+}Y-?sg3OZm-5+ zjIgkWojG;}?I+>d2wZ4u4~8e@)^y|j>yLx07h^A`;EZ6dkNId$w&!xPCPB#z`Cv-1 z^(V3NKbiKRRcgoVw0uP1aqH}%>nZsNn#GCC-Msu?^aAe{NGTRsV$Y=}r>5uU16jwW zW2@5$s{RAb&v)peid#M(XvB+n6zILEt)!>2Nlmn`S14d?39ojKew_& z{ypTGTGUTs$4j#XoK6eUn0^|qi_1d-Xw&spo-Ytpb2D>*#?yi+(>R0T^P`OemzS3# zQ;vpABO#d^g%32$@*KDyXwq50nF010P>u@#-gQM|q5 z0O^JfyppGbyGh_ltrXU7-xq0CgYc~Zj^JA(WC#iga%ZR`tf>*wCiMh48SDto=WwM} z`C1UUxU2HKd1#J|F>{UoV?M{?Xjw}-aXlh_h|)z1_ZnwJY-Lx^cLc2?4$RJ?=$}<9 zeJ~(-_g3nxsVt*qnG=_N&*L0!xBxci1+QxG_KMOFV~%^Il$x<|mmJ}cx+4?IS7K$g zhc6rVKsa#RT~^RZltzUey?>IOUmlBQ!c6&n|S9j7Iy&%O;9>-BQWPrVSX*2 z!tV)OHFqrNUl7!{_XR|Zi^f9o1tEm8jkI?(LEiPj6?!qHjL*TL3&OIy)9g3{TYP+U zpL8$x+IrBqC~U5Axro#m_5yZY#3}o-KbJbV`ExU7&oRMNr>ZnQ+W3x?x1{S5Mok$P zJK?m+F@q?Ux4fZFoVP4FRhB(@G&FaK<98s@x$g38?L`+{b2PpzbvrMbIl&FtSjI#7 z&f?bua=3~tWT3rgKC)CNNLz!_tU?`u4^@zm_>GNc7|Jj2*K3Q=p#BSk*;o`QXX;L?hKKcj74+de#{%-#IZS_wqdoPVRNPj0F4C z%LO#X;m(XN^A}6t9erJ3#$|y&%L(#}hYQqQ=JihT6$I+ND8OVUhZL$E4nmn2juDmE zRQe{m!0{`@fcFw;Xq4JA(Fk45%1%C`7|ENGObBn3eQh3+6kbK*;c1ff{ z-lO`#ol1;gJK+grac6w5!1`-~%GCOBe;Qd@&(M;(03qtG@Z_3&7-dea={3&zXromc zq>OCX-4$*+x$r&#E!$#rRGS=33&NL+IkaVfD?AQxVbuLY!^w*(pibxl&QdcfKDm<(G=$_4%6{?f`IL^DP z^z2$vwJW4Qcj2>})K5*;n|AgFGMz2zKCxfYx0f52tW3&JNoV$(oSW9k`gcc;3+1H8 zdY$#%VD}Bdur}YouDXW1!KWL7dtveyBCBHD!22(uOaVcT&vAqE<*t0@g>J!kd%1hC z8~SKQ7}khqbHWlg4m*>TOWkIgo9!R4yiN^!ACBAh#Qc4Is~a~ZSxL6b;NLl*X;sR( zkIv+M{04nY)vp4}5xd%Jpx-uvIR$m{d#^n^k$09N?}%Ts{!cg9*4d58pH1~Xas3>M z(LOJ!7_Dw}#=m>U0oV-DOTveVIC#mSr*% zD{kVOdOEtpuA9Q05)&$JuP?y)*TGGS7zHw)k>hBwevsZtIJfWIgtb-Xx`Vo@>VeHCNx+3gN0w*>AnyM+~_D=E?&638!N6btc-YSm+SbPFy2 zm-Bgb1U>VLpuAgVJMZbfT;vi<9JYj|jK+aWv*1l;He<6ILnxvRzWPGco2}T^fy2mX zD^4o@V?L2SjRU9Y?!0`_E=D8Vb^O9{oR`Vu92uE*Ilo=uuFiAQ z3QUZB|3tdl@$Sbjr2}n*@L~F?W3j`LPU+YKv6yma$3f5M?s%H{fjbkPoz^rx9)oGz zU1`!7Vro6Dz@)2Iv|!fuV7 zEu0~JEi-2U50%r56=2R z8p87)azfek@tiCzJv)a_+tSde*l4Pe89G??m!qlOJ@mH64^WNxt|V91pW^crZ-)9m1+5Z(z-Rf%R)ixjb$Hlp2rcgEm^- z@BzZ^LnlB+;CSi2Qzd!kU{0SgOBg8+V-J4B?wJx5&d3Uy=fnxn{6I+7Xg$Q*0m&5U z)4u$ZK;W}WCP3jsffIKVWW~=D;Nn9;WjN<-eO!S)O*6WhVwTw3h*u*0E2s?rf3adk z3q^XvEb@z}jCJITm8K_XJ;Kv*L}ySw+g%y6$kQF26HhfsPNky`Eo)6{dtxQE%~76k zJ%0idOU*MZ+q@i&%JNlGoj)nj6MmU9fpN_rViR2^Eb+t@atjL@OH%`|$lsvv9@MC{ ze@hRly;&iY{j&LW_G9eD>m#19{;{BZY7tR?ecF@DnIfNTBH3cr_X!ri$9aLl08hqI zO(F2NoxLFXTTf;KM-_pq9lfCOi7;2)h%A(k^@8E8!lc9yq?3~ur#S*d3eG3 zR>A94d5Xx&TrbFYijM1-u#8gso}cO6vq-Ns&!mZ-w=-!43(D$-Wm^i&FfQAN#zD;L z+FQLidE%7OR_(0*jJ$98E-&cuOkirKXUOHQ_o4I|T8Cv_ym;+M=dp-9dhw7v;&(?Z zFE-d@Nzz}KATk!Q?elk_@?7vCJ3mgfnC-}M`46Rwh&dg-A>g@u6dm5P`^Q%7#i+#z z!$YwQc({2($#a3O_0O@#(3w$zkj!=7u;hh6^D2V$ z|JxfHUkD1e`%4_w+&eJhrQjeYAfQ&z-v@S&^=5QkDS`J6q;MZ-BEN`id?a7)j`IP7 zSHerZUmUkU_VuoQu%m}BqY!Q1qlHy9_QOO=npd(c zGM8@Yq|W-rfzuY`x?ujNMJjLR!T>L{GcYomx;;_s?2tN z8_982Lpn%q3d#K54?I2yVl?9elKRL^KUm%()TYdIp1}8RQ&_k7BmN*#)SrB5?cfi` z)%_TLQ4;u2cM9u*Q4hgMK2G3pTYqT!C@9ySZHNqZ_6M^z!Qw^yzPfGv>7Fi@ZO!k^1eNT{pWIZ1WAdbh&B|- z{8>G&iq8yJ1;AKU1%I1n20=z{2!Lg(3VvTg%EgT83z$gxA3Cr|3Fb5QMgTOcD)@a* zH613FE=The{F8K2qi)k;Ixy>=@NTLJT2?%YZ$g0$!BL9m!oF)DcxwhQOD|_!_6ILT zZLV1?%_pU31;UKp0qxTO>K$+dKJI}KGd_SfD)e=uz4sQ>55Z-rBT_eZdq5x@3=ZHO zOFCtbtgdz(fH|JcSYE88&P@yC@?}b8YWsmt+IsQCJL~Ua?9qB$>fzhW4Fs)@3jQ)v zmyX!C)E$8k{~0MF$o1bTq644y2k^5)8(r1!uxu{!K|iDr_JsNLxEWa7Nx>)4tPZI3 zdx=S8S#MQ|Z+Q1MDP=%IUfSS|g~8>kQ29Pb<0!WL=DmZ!MJJGgL8cN9w&qx1zhq}oIw`qzw#Cm%W z9938FC-PTk?mSbDp5(2b(lEDRR}f_E#G!uK)M!sG6fC$N1hEYQ5owne5_s{QAV_Uw z>2-s^CVIgTprOEn*Pj!wP1ef{>wVC?wyAN*6U@ign3lDp-5++=el?~IxEV+nF(XV* z3x*vU3VxUAyX}e#nHVYkI9e(*%B*0pPYz;&vEkjYLuSi^!ESaC!$w7y8m2BmQ@iVo zl#TkY42EIzgeGXj`XSbht3ikQ>kAFvZ3*Ub(kEvmE15iEf&1xf4O9x3!=&uhb9XQp z{u;!y7nSJcuT2KV;ehqfmWX}zw3c8lB6)Hye}@yL&aFo`-;hMrQWR!mhJ=_`x*rU6 zngVNl(!>!fx`sf%?gHZ59g#_cLLjBPg1@YI9YIE}4uMZAg30}F!n(*K0r@(CIS>V$~@W ze%2B?T7yV8^B$p?gOt%EBpf%8e@n$>X0_VU-l%juF@6Q`PYvhE~#Rw1k*&~cJGIULPJjle-&$6PZZ)#QK8&4 z%x1LT4CK=bhtR4Bg(%n45VE z3HDU{^=O&I)Y*5VxhH=@l)SM*6L_8KY9afAG7Cy!s9Qh-B zEZ)ntM`~AB4iAH2dZCP6&C^yGXpT(|*L63}&ASWqi$40(beF!n!n*NgJsm@Td=A(5R!}F9y`mMP$25I5@Y4GMX}qz;|`R zp`b$;Z!2j1Z3Moi8xCn5!x%Ank8oF0y>Ko$Cp$YiyZuNdos)#ofxX^f06(*z)Npt1 z9}a6Z@C8IeQ^x2wwxFEsWB#YNRO$QLhGPaUE#J2NKuMtM-c#pMiBwIJHvFwqc(K0V z5SZ&@pIs8e!Czkx*4YHnnivl2^#un^HvImjdn&lsAN3bD$b2453y1HL!kCDmCUp0Z z+32j1g;8|In2&KjEvrj&hji#&;x2{lM5#D{{33SjUd|1NMVSI^>1I#sl!Sl(vBi)Y zq|3>zi^4fKRG-R-WThWfBed~YJC|R7!j5c5>nLt~;Hhw^+#@tj%c|@SrzfIL-jd2t z=Q^B&!|ZHU8X$Sx?uNtlOKcNI!>s*`(coFWk$Rt3Tf@A=V3>q^k5oy+pIttYZ^O-s|0(SRP@E2!)RKINT z&lvQ~4oDX{OlQ$zcyE$CobmEq`s09;D)L$_vGD{9$i!59H!2dG`b042-y4i@7&}t+|kFhZ#tpSlR*7$SyLJ(U#IK9kR zke<801k@6n^A?ScSbF?^jD%*aNPDgtd!umsNTfS5kXUf8uZaZn0YYm!4}yC=#{OP&0?7IgrRfpapjwrbF?-e13cRMGeW<-#dp`~v_xy^|hhIg) z(u)xcx3?ju1u3sdeZwy)I~}qUg`|uxYBjTFZpB8KsX{R8Z+F5+W-edf!08b zBguViv@cP5MP+tKub_?6fI4^>Ez1Yg@g=j>rlJm6`;`v4>5Ug%4itjJh@y@Ki|sgW zA)ZnkBzp74AX-eP{f2M)`q%e-7vmo?;3_c+6L)pi(kKX=7|Dbgr&k`T)I%v8yG?5M zR;{3AwV`lIB*S#y>-?%;j17+%CS^L6U!$O8kYIi41|cuClv1R3@nHNx^C#rXg1@4m z;b0`*mA5yNNztW|XWT#Z88fd_u3a>~h>mBAwe)?t+R@NBSi$eun^Kh;QiwY2&|gxE zv3zhemztfIo0Zi5M;4-npjnFvj^=`8*=fls@T{M3d@~?x*P9nObG==qoY4^ZxpeU{ z9VT^VXw!4kHz*?4(3KN2b)T8hkTO1s3CNaYmaW)}T5?^ybSCG`i-y1bqnL3oj5~eI zMHBZkV0p3TSbQKFGK!-3TTAJL@2x(OvkK?qY^k)@`lo4GKGdL^x@^nz_yp|lHq;nm zkyd#c%}tVJ<)x-igIkwy1^bKd)h$5%-U4j@#!;z!m;V z?6kPwOTLN01HkD@+=560OxpFz$N!agHp4AGzEZ=nWkd|Ly^7+yPRrg5@KUu`!L8q_ z(x%&@V&K*=1xD3)&XJbAwB}#KOIY?l?234p^J8dPUUU6so>vrzB1p~@i$!HyTnvmF zuHduX8#?Vfpf{A`&NWK~dO}hRY%q;x;*j#;$j9YNW1w!hp!cF{J4b$lwT0UdTi)tnZ6U<^aSM^8?6wZw{Y~L(gQ>(X)?AQK)JU?8d7-~<_viu=L z+HT~M$%$U*YWt!(6-N+zp2mP?Q8aT|(%${GF$+5Ropu%wjn|S?+X+{v30}`gJE%N~9BFzF6fE3oZ|$8GcsO)Rq{c9`~q~ zPTs$sv@F9E8}+Z;8itcxkFz{LM1=4-ENiO3P41tsRic!blsD|pg`@B`^sl^~x{0&` zpFrId6srCXIim~8wb;0BhuC797{<09H$_4`T^9>Yrh;wNGDGC>$yoT#Orb}w#-r*_ zM&R}5Da_}e=9Sm4y@rm^Gh9*->-K}4;y~-S7$yQ5VxuuQ7Okx2ZRtkU77bb!@A&$> zv>h`F-}KX%IB>cZqXR{w6#QSs*+Jk3&J<>Jjbh`FQ{-Gu3^JXVIp$7_0|Rpf|JPT3 zEN|*E8X2u^k(4jWzKesk2C@7yG^Mh_@$G<0oNkA1(k4x}$3dKBEOQ{M*&KT{x-1Sp znG39CHX0FGZ5*r!i)Dh8LIRJvN@3YQ{@g`9FeRVS4UyTP=W zA;eo?C1R6ik}tCY;&F$Q&?!2At@pRyt;8vDoF*M?Nn|`Uv-;`}dFw5p@}(+G<8$j`f3ZxZs#FK7+L zDlM)$9+vsWF`$hL>Wq#9fMEG?^B92CcRxlvX~gs^+@5SJNe2>lI(tU@+C4s2L4at zwcC$2(Pul!Gpot;8Dqyj5;$Z7wlpMxQFfm8*r8dQWn44Kj6(}C$O zNc6cVG-5^ESSiCl6rk{trDfpV7o8IMoz^roe)RlL?^`Y$cMM%WvHnY|Zm*O?BS+d< zTL)YyTHi5|o1Pb964HL8TJwtjdU8p=<}T@!FH%p05(gnEYc@NjtpP32cr=5?3@>6@ z-yjj5I0*LMu4<&j5+GX};9Bwnfmg{4ogH zo8j8GH!sCD$r%IrnsB`c#?H%d4H?eyLHI`dZ>eFM84hx`$E@M;m0kC{c~_ z^580&8Tt~n7^sWw>+N6V5Ys7D~&H$jD! s5~M0Y0p~v>9|%%1Spj|B6}-E|{xwe|IrCBbSpli;ihiB!PACxmKR~EVF8}}l delta 512807 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̾(92__pIC0 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%0AqaAbp?r4W&jcgwG@ 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%0D#s>_5*U&f8|%1M@jfnqM&bDT0p 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